在不注册 WNDCLASS 的情况下创建窗口?

标签 c windows winapi

是否绝对有必要始终为您的应用程序构建和注册一个新的 WNDCLASS(EX)?然后将 lpszClassName 用于主窗口?

难道没有一些我们可以用于主窗口的预建类名,比如按钮和文本框等有“Button”和“Edit”吗?

最佳答案

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

#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 使用资源编辑器创建了一个对话框。

关于在不注册 WNDCLASS 的情况下创建窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10232221/

相关文章:

c - 写入后从串行端口读取

c# - 处理器使用情况(强制完全使用)

java - 如何在Windows 上打开名称过长的JAVA servlet 文件?

windows - 图标(DefaultIcon)显示不同

c++ - 判断鼠标是否水平移动(C++)

c++ - EN_UPDATE 工作不可靠?

c - 使用 GDB 检查 C 指针

c - C 结构的数据对齐

windows - 如何使用 `nasm` 和 `alink` 的组合链接 kernel32.lib 和 user32.lib ?

c - 获取使用的端口和状态