创建窗口而不注册WNDCLASS?

时间:2012-04-19 16:09:17

标签: c windows winapi

是否必须始终为您的应用程序构建和注册新的WNDCLASS(EX)?然后使用lpszClassName作为主窗口?

是否有一些我们可以用于主窗口的预建类名,比如按钮和文本框等的“按钮”和“编辑”。?

2 个答案:

答案 0 :(得分:6)

您可以使用CreateDialog()而不是CreateWindow()创建对话框资源中的迷你应用程序。 Boilerplate代码可能如下所示,减去所需的错误检查:

#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;
}

假设您使用ID IDD_DIALOG1与资源编辑器创建了一个对话框。

答案 1 :(得分:2)

顶级应用程序窗口没有预定义的窗口类。您必须为您的应用程序注册窗口类,或使用对话框。

相关问题