窗口程序的框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <windows.h>
//步骤
//1.创建WinMain()主函数
//2.设计窗口
//3.注册窗口
//4.创建窗口
//5.显示窗口
//回调函数,消息处理函数
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;
}
//1.创建WinMain()主函数
//WINMAPI 函数修饰符 被称为栈的数据结构 用来支持参数传递
int WINAPI WinMain(HINSTANCE hInstance,//该程序当前运行实例的句柄
                    HINSTANCE hPrevInstance,//当前实例的前一个实例的句柄
                    LPSTR lpCmdLine,//是一个以空终止的字符串, 指定传递给应用程序的命令性参数
                    int nCmdShow//指定程序的窗口应如何显示
                    ) {
    //2.设计窗口
    WNDCLASSEX wc;//窗口属性
    memset(&wc,0,sizeof(wc));//初始化结构体
    wc.cbSize        = sizeof(WNDCLASSEX);//赋值结构体大小
    wc.lpfnWndProc   = WndProc;//窗口处理函数的指针,用来发送信息,回调函数
    wc.hInstance     = hInstance;//实例句柄
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);//窗口类的鼠标样式,为鼠标样式资源的句柄
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//窗口类的背景刷,为背景刷句柄
    wc.lpszClassName = "WindowClass";//指向窗口类的指针
//  wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
//  wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
/*  if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }*/
    //3.注册窗口
    RegisterClassEx(&wc);
    //4.创建窗口
    //创建成功后返回值为窗口句柄类型
    HWND hwnd;//句柄,或指向窗口的指针
    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,//窗口的扩展风格
        "WindowClass",//指定窗口类的名称,设计窗口类中为lpszClassName成员指定的名称
        "Caption",//指定窗口类的名字,窗口样式指定了标题栏,窗口名字将显示在标题栏上
        WS_VISIBLE|WS_OVERLAPPEDWINDOW,//窗口的基本风格
        CW_USEDEFAULT,//x
        CW_USEDEFAULT,//y
        500,//宽
        500,//高
        NULL,//窗口的父窗口句柄
        NULL,//窗口的菜单句柄
        hInstance,//应用程序实例句柄
        NULL);//窗口创建时附加参数
    //5.显示窗口
    MSG msg;//所有消息的临时位置
//  if(hwnd == NULL) {
//      MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
//      return 0;
//  }
    while(GetMessage(&msg, NULL, 0, 0) > 0) {//如果没有接受到错误信息,执行下面函数语句
        TranslateMessage(&msg);//消息转化
        DispatchMessage(&msg);//消息派遣 把TranslateMessage转换的消息发送到窗口的消息处理函数
        //此函数在窗口注册是已经指定
    }
    return msg.wParam;//指定应用程序退出
}

  

posted @   陈若麟  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示