2012-01-22 3 views
3

"hello world"를 인쇄하는 C로 데스크탑 OS를 만들었습니다. 나는 C에서 내 OS 용 GUI (사용자 정의 창 관리자, 버튼)를 만들려고 노력하고 있지만 문제가 있습니다. 집에서 만든 OS에서 GUI 환경 개발

http://www.osdever.net/tutorials/view/gui-development

C의 데스크톱 운영 체제에있는 GUI 자습서의 모든 종류가 있습니다 : 나는 한 튜토리얼 보았다?

p.s. 리눅스도 DOS도 없다. 단지 C 표준.

+8

@vines : 무례하고 아마추어 개발자가 운영 체제를 만들 수 있습니다. 모두들 배울 리소스가 필요합니다. – CharlesB

+2

@CharlesB : 발견하기 전에 주저 했었습니다 : http://stackoverflow.com/questions/8964440/operating-mouse-driver -in-c 나는 또한 단순한 것으로 시작하는 조언을 생각했지만, 그것은 더욱 잔인하게 들리며 나는 정말로 누군가를 불쾌하게 할 의도가 없다. – vines

답변

4

제 생각에는 이미 존재하고 과거에 존재했던 GUI 시스템을주의 깊게 살펴 보는 것이 좋습니다. API를보고 어떻게 작동하는지 알아 내려고합니다. Alex's answer은 좋은 시작점을 제공하지만 모든 환경이 동일한 방식으로 작동하는 것은 아닙니다. 그들의 아키텍처에 대해서도주의해야합니다. 클라이언트/서버 또는 단일 서버입니까? 앱이 어떻게 그들과 통신합니까? 이 모든 것을 이해하면 시스템 설계를 시작할 수 있습니다. 귀하의 창 관리자/응용 프로그램 서버/x 서버가 상응하는 위치를 파악하고 통신 채널을 만들고 코딩을 시작하십시오. 이러한 모든 구성 요소가 커널과 어떻게 대화해야하는지 파악하십시오. 정말 중요합니다.

달리 커널 개발 어디에 당신이 거의 확실 GUI 프레임 워크가 구축, UNIX 또는 VMS 같은 비트 좋아하지만 편의를 위해 혼합 미닉스와 마하의 요소와 조금 보이는 뭔가를 구축하고 정말 급진적 당하고하지 않는 한 많은 다른 유사 콘텐츠로 인해 더욱 복잡해졌으며 아마 많은 튜토리얼이 그렇게 많지 않을 것입니다.

내 개인적인 영감 오에스입니다. 나는 그들이 그 일을하는 방식이 마음에 들었으므로, 복사 한 내용 중 일부를 실수로 살펴보고 복사하지 말아야한다고 말했습니다. BeOS는 상당한 실수를 가지고있었습니다.

5

여기서는 특별한 안내서가 필요하지 않다고 생각합니다. 가장 기본적인 GUI의 핵심은 윈도우, 버튼, 그림, 텍스트 상자 등을 나타내는 직사각형 객체 목록을 관리하는 것입니다.

모든 직사각형 객체는 x 좌표와 y 좌표 및 크기 (너비와 높이를가집니다.). 또한 z (깊이) 좌표가있어 그 아래에있는 대상 (z가 작음)과 그 위에있는 대상 (z가 더 큼)을 알려줍니다.

모든 직사각형 개체에는 부모와 자식에 대한 포인터도 있습니다. 이렇게하면 더 작고 간단한 직사각형의 임의의 복잡한 창을 쉽게 구성 할 수 있습니다. 사물. 예를 들어 창을 움켜 잡고 이동할 때 이러한 부모/자식 포인터를 사용하여 모든 개체를 이동할 수 있습니다. 또는 외부 객체가 이벤트를 받으면 처리를 위해 내부 자식으로 전달할 수 있으며 반대의 경우도 가능합니다.

일부 직사각형이 부분적으로 또는 완전히 다른 사람에 의해 가려 질 수 있습니다. 가장 중요한 것은 모든 개체가 보이지 않고 보이지 않고 부분적으로 보이는지 파악하는 것입니다. 불필요한 작업을 많이하고 싶지 않습니다. 효율적으로 모든 픽셀을 한 번 (항상 또는 대부분) 그릴 개체를 그립니다. 필요한 직사각형 교차/세분화 코드 외에도 모든 객체가 자체의 임의의 직사각형 부분을 효과적으로 그리는 방법을 알고 있음을 알 수 있습니다. 이것은 단색 개체에 대해 가장 중요합니다. 사진의 경우 다소 (이미지 스케일링 및 색상 축소/변환을 원하는 경우가 아니면) 직선적입니다. 텍스트 및 벡터 객체의 경우 가장 힘듭니다.

작은 사각형 개체에서 마우스 포인터 개체를 구성하고 다른 모든 개체와 동일한 코드로 그리거나 다시 그립니다. 포인터가 항상 다른 모든 객체 위에 오도록 포인터의 z (깊이) 좌표가 맞는지 확인하십시오.

그게 일반적인 생각입니다.