Loki20080717 2023-07-06 12:03 采纳率: 100%
浏览 16
已结题

c++ Windows application类型项目初始代码

有谁能告诉我一下以下代码是什么意思啊?完全看不懂
语言C++

#include <windows.h>

/* 这是窗口的所有输入所在的位置 */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    switch(Message) {
        /* 销毁后,通知主线程停止 */
        case WM_DESTROY: {
            PostQuitMessage(0);
            break;
        }
        /* 所有其他消息(其中许多)都使用默认过程进行处理 */
        default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}

/* 所有其他消息(其中很多)都是使用默认过程处理的Win32 GUI程序的“main”函数:这是执行的开始*/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc; /* 我们窗口的属性结构 */
    HWND hwnd; /* 一个“HANDLE”,因此是H,或指向我们窗口的指针 */
    MSG msg; /* 所有邮件的临时位置*/

    /* 清空结构并设置要修改的内容 */
    memset(&wc,0,sizeof(wc));
    wc.cbSize         = sizeof(WNDCLASSEX);
    wc.lpfnWndProc     = WndProc; /* 这是我们发送消息的地方 */
    wc.hInstance     = hInstance;
    wc.hCursor         = LoadCursor(NULL, IDC_ARROW);
    
    /* 白色,COLOR_WINDOW只是系统颜色的#定义,请尝试Ctrl+单击它 */
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = "WindowClass";
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); /* 加载标准图标*/
    wc.hIconSm         = LoadIcon(NULL, IDI_APPLICATION); /* 使用名称“A”可以使用项目图标*/

    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, /* x */
        CW_USEDEFAULT, /* y */
        640, /* 窗口宽度 */
        480, /*窗口高度*/
        NULL,NULL,hInstance,NULL);

    if(hwnd == NULL) {
        MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }

    /*
    这是我们程序的核心,所有输入都经过处理发送到WndProc。
    请注意,GetMessage会阻塞代码流,直到它收到一些东西,所以这个循环不会产生不合理的高CPU使用率
    */
    while(GetMessage(&msg, NULL, 0, 0) > 0) { /* 如果没有收到错误。。。 */
        TranslateMessage(&msg); /* 将密钥代码转换为字符(如果存在) */
        DispatchMessage(&msg); /* 发送到WndProc */
    }
    return msg.wParam;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-07-06 12:08
    关注

    这就是一个用windows api编写的最基本的窗体程序,winmain定义了窗口类,创建窗口,消息循环,wndproc处理消息
    这个程序没有什么实质的功能,只会显示一个空窗口。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月14日
  • 已采纳回答 7月6日
  • 创建了问题 7月6日