2010-12-01 3 views
1

GUI 프로그래밍을 시작하고 Windows에 관한 질문이 있습니다. 튜토리얼을 읽었고 새로운 WNDCLASS를 만들고 RegisterClass를 호출 한 다음 CreateWindow에 새 클래스의 이름을 지정하여 창을 만듭니다. 또한 CreateWindow를 사용할 때 Button이나 뭔가를 만들려면 Button 클래스를 사용하는 것이 좋습니다. 그래서 이것은 결론을 이끌어 냈습니다 : 창 (테두리가있는 종류와 최소화/최대화 버튼 등)을 만들려면 새로운 WNDCLASS를 만듭니다. 그렇지 않으면 WNDCLASS를 만들 필요가 없으며 BUTTON과 같은 미리 정의 된 클래스 이름 중 하나를 사용합니다. 이 올바른지?Windows in Win32 API GUI 프로그래밍

답변

6

수정. 자신의 윈도우에 자신 만의 WNDCLASS을 정의해야하는 주된 이유는 윈도우로 보낸 메시지를 처리하는 고유 한 윈도우 프로 시저를 할당하는 것입니다. 버튼 및 편집 컨트롤과 같은 표준 컨트롤에는 표준 윈도우 프로 시저에서 정의한대로 잘 정의 된 동작이 있으므로 미리 정의 된 클래스 이름 만 사용할 수 있습니다.

0

시작하려면 WINAPI로 시작하는 Windows GUI 프로그래밍을 배우고 있어야합니다. 이것은 제가 권하는 것이 아닙니다. 대신, 먼저 MFC와 같은 Windows GUI 라이브러리를 배워 보겠습니다. Windows GUI 프로그래밍은 충분히 어렵습니다. 처음 배울 때보다 힘들게하지 마십시오.

윈도우 클래스는 C++ 클래스가 C++ 객체와 같이 화면의 윈도우에 있습니다. 그것은 화면에 창을 구성하는 방법에 대한 청사진이며, 처리 할 메시지의 기능, 사용할 장치 컨텍스트 등의 정보를 포함합니다.

다른 종류의 창은 다른 창을 필요로합니다. 수업. 소위 "공용 컨트롤 라이브러리"에 미리 정의 된 많은 창 클래스가 있습니다. 공통 컨트롤에는 일반적인 창에서 찾을 수있는 모든 컨트롤이 포함됩니다. 버튼, 슬라이더, 텍스트 상자, 격자 등 공통 컨트롤 라이브러리는 초기화되었을 때 이미 완료했기 때문에 클래스를 직접 등록하지 않고도 이러한 공통 컨트롤을 만들 수 있습니다.

화면상의 모든 것이 어떤 종류의 창입니다. 이 웹 브라우저, "뒤로"버튼, 내가 입력하는 입력란 - 각각은 별도의 창입니다. 그리고 각각은 적절한 창 클래스와 연관되어야합니다. 사용하는 대부분의 컨트롤은 공통 컨트롤 창 클래스와 연결됩니다. 응용 프로그램의 메인 윈도우가 일반적인 컨트롤이나 미리 정의 된 윈도우 클래스가있는 다른 유형의 윈도우가 아닌 경우와 같이 작성중인 윈도우가 있으면 해당 클래스를 직접 등록해야합니다.

+3

사실, 나는 계산기로하는 법을 배우기 전에 오랫동안 나누어야한다고 생각하는 유형입니다. 그리고 저는 C++에 이미 익숙합니다. 그래서 그다지 열심히하지는 않습니다. – Sareph

+0

@Sareph : 다음에 행운을 빌어 요! –

2

귀하는 틀림이 없습니다. 윈도우 클래스는 윈도우의 모양과 동작을 정의합니다. 스타일을 변경하고 창 메시지에 응답하여 특정 범위를 재정의 할 수 있지만 사전 정의 된 창 클래스 중 하나가 작동하지 않으면 고유 한 창 클래스를 정의하는 것이 가장 좋습니다.

CreateWindowEx 설명서에는 미리 정의 된 창 클래스 목록이 있습니다.

+0

표시된 목록은 매우 불완전하지만 시작하기에 좋은 곳임을 지적하십시오. –

2

.

네, 맞습니다. 미리 정의 된 controls \ windows 미리 정의 된 (look 및) 비헤이비어가 있습니다. 이를 시스템 클래스이라고합니다. 예를 들어

,

"버튼은"당신이 버튼을 만드는 데 사용할 수있는이 클래스입니다.

MSDN

버튼 : 버튼의 클래스에서 표를보고하십시오.

콤보 상자 : 콤보 상자의 클래스입니다.

편집 :: 편집 컨트롤의 클래스입니다.

목록 상자 :: 목록 상자의 클래스입니다.

MDIClient :: MDI 클라이언트 창의 클래스입니다.

스크롤 막대의 클래스입니다.

정적 :: 정적 컨트롤의 클래스입니다.

이제 MSDN에서 읽을 수 있습니다. 클릭 : About Window Classes

희망이 있습니다.

.

1

"정보"창과 같이 새로운 "대화 상자"를 만들 때 새로운 RegisterClass()가 필요하지 않음을 기억하십시오. John Dibling과 Windows API를 비교하기 전에 MFC를 배우는 것에 동의하지 않습니다.

MFC는 Windows API, 즉 MFC IS Windows API 위에 구축되지만 C++ 클래스로 래핑되므로 MFC를 알아야 할 경우 Windows API를 알아야합니다.

행운을 비네.

3

이전 버전의 Win API 프로그래밍을 사용하는 경우 Programming Windows by Charles Petzold만큼 권장 할 수 없습니다. IMO가 미친 최신판이 절판됩니다. 이 은 주제에 대한 고전 서적입니다. 절판 되었기 때문에 중고 버전에서는 더 많은 비용이 듭니다. 더 저렴하게 가고 싶다면 previous edition을 얻으십시오.이 금액은 $ 0.01에 구입할 수 있습니다. 기본 사항은 모두 동일합니다.