2012-04-19 13 views
4

アプリケーションに新しいWNDCLASS(EX)を構築して登録することは絶対に必要ですか?メインウィンドウにlpszClassNameを使用しますか?WNDCLASSを登録せずにウィンドウを作成しますか?

ボタンやテキストボックスなどの「ボタン」や「編集」など、メインウィンドウに使用できる事前ビルドされたクラス名はありませんか?

答えて

6

ダイアログリソースからミニアプリケーションを作成し、CreateWindow()の代わりにCreateDialog()を使用することができます。定型的なコードは次のようになり、マイナスに必要なエラーチェックができます:あなたは、ID IDD_DIALOG1を使用して、リソースエディタでダイアログを作成したと仮定し

#include "stdafx.h" 
#include "resource.h" 

INT_PTR CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
    { 
    case WM_INITDIALOG: 
     return (INT_PTR)TRUE; 
    case WM_COMMAND: 
     if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { 
      DestroyWindow(hDlg); 
      PostQuitMessage(LOWORD(wParam)-1); 
      return (INT_PTR)TRUE; 
     } 
     break; 
    } 
    return (INT_PTR)FALSE; 
} 

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { 
    HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc); 
    if (hWnd == NULL) DebugBreak(); 
    ShowWindow(hWnd, nCmdShow); 
    UpdateWindow(hWnd); 
    MSG msg; 
    while (GetMessage(&msg, NULL, 0, 0)) { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
    return (int) msg.wParam; 
} 

+1

非常に勇気がある場合は、WC_DIALOGスタイルを使用して、CreateWindowEx経由で直接ダイアログを作成できます。 –

+0

[EndDialog()](https://msdn.microsoft.com/en-us/library/windows/desktop/ms645472%28v=vs.85%29.aspx)がモーダルダイアログで使用されていると思われます[DialogBox()](https://msdn.microsoft.com/en-us/library/windows/desktop/ms645452%28v=vs.85%29.aspx)などの関数で作成されたもの_ _ [modeless] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms645434%28v=vs.85%29.aspx)_上記のようなダイアログでは、[DestroyWindow()](https:///msdn.microsoft.com/en-us/library/windows/desktop/ms632682%28v=vs.85%29.aspx) –

+0

EndDialog()でかなり満足していましたwinapiでそれを処理する:) –

2

トップレベルのアプリケーションウィンドウ用に事前定義されたウィンドウクラスはありません。アプリケーションのウィンドウクラスを登録するか、ダイアログを使用する必要があります。

関連する問題