문제

그래서 저는 모든 분야의 완전 초보자입니다. Windows 관련 프로그래밍.나는 가지고 놀았어 Windows API 생성 창 등을 초기화하는 방법에 대한 몇 가지 예를 발견했습니다.

한 가지 예에서는 일반 창을 만듭니다(일부 코드를 축약했습니다).

int WINAPI WinMain( [...] )
{

    [...]

    // Windows Class setup
    wndClass.cbSize = sizeof( wndClass );
    wndClass.style  = CS_HREDRAW | CS_VREDRAW;
    [...]    

    // Register class
    RegisterClassEx( &wndClass );

    // Create window
    hWnd = CreateWindow( szAppName, "Win32 App",
                         WS_OVERLAPPEDWINDOW,
                         0, 0, 512, 384,
                         NULL, NULL, hInstance, NULL );
    [...]
}

두 번째 예에서는 대화 상자를 만듭니다(WinMain 인수 외에는 약어 없음).

int WINAPI WinMain( [...] )
{
    // Create dialog box
    DialogBox(hInstance, 
              MAKEINTRESOURCE(IDD_MAIN_DLG), 
              NULL, 
              (DLGPROC)DialogProc);
}

두 번째 예에는 등록 함수에 대한 호출이 포함되어 있지 않습니다.단지 DialogProc 프로세스가 연결된 DialogBox를 생성합니다.

이것은 잘 작동하지만 창 클래스를 등록한 다음 대화 상자를 만드는 이점이 있는지 궁금합니다(가능한 경우).

도움이 되었습니까?

해결책

대화 상자를 등록할 필요는 없습니다.

대화 상자는 미리 정의되어 있으므로 (설명한 대로) 대화 상자를 만들 때 창 클래스에 대한 참조가 없습니다.대화 상자에 대한 더 많은 제어를 원하는 경우(자신만의 창 클래스를 만들 때와 같이) 대화 상자 창 프로시저를 자신의 것으로 바꾸는 방법인 대화 상자를 하위 클래스화할 수 있습니다.프로시저가 호출되면 대화 상자 창의 동작을 수정합니다.그런 다음 수행하려는 작업에 따라 원래 창 프로시저를 호출할 수도 있고 호출하지 않을 수도 있습니다.

다른 팁

이 작업을 수행한 지 꽤 시간이 지났지만 IIRC의 첫 번째 사례는 인메모리 템플릿에서 동적으로 대화 상자를 생성하는 것입니다.두 번째 예는 리소스를 사용하여 대화 상자를 만드는 훨씬 더 일반적인 경우입니다.Win32의 동적 대화 상자 항목은 상당히 복잡했지만 이를 통해 진정한 데이터 기반 인터페이스를 만들고 DLL과 함께 리소스를 번들링하는 데 따른 문제를 피할 수 있었습니다.

Win32를 사용하는 이유는 Windows 앱이 필요하고 MFC나 .NET 런타임에 의존하고 싶지 않다면 Win32를 사용하는 것입니다.

이것은 질문과 접선적으로만 관련이 있지만 Windows 프로그래밍이 처음이라면 왜 Win32를 사용하고 있습니까?(어쨌든 GUI와 분리되어야 하는) 저가형 코드가 많지 않은 한 머리 부상을 훨씬 덜 유발하는 .NET을 사용하는 것이 더 합리적일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top