win32框架

win32的框架 

1.入口函数 2.窗口注册类信息 3.窗口创建 4。显示窗口 5.更新窗口 6.消息循环 7.入口函数结束

WNDCLASSEX wcex;窗口类结构

wcex.cbSize = sizeof(WNDCLASSEX);//结构内存大小

//类风格wcex.style CS_HREDRAW 水平刷新 CS_VREDRAW垂直刷新 CS_DBLCLKS 窗体鼠标双击响应事件

 1 //  函数:  MyRegisterClass()
 2 //
 3 //  目的:  注册窗口类。
 4 //
 5 ATOM MyRegisterClass(HINSTANCE hInstance)
 6 {
 7     //窗口类结构
 8     WNDCLASSEX wcex;
 9 
10     wcex.cbSize = sizeof(WNDCLASSEX);//结构内存大小
11     //类风格wcex.style  CS_HREDRAW  水平刷新  CS_VREDRAW垂直刷新  CS_DBLCLKS 窗体鼠标双击响应事件
12     wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
13     wcex.lpfnWndProc    = WndProc;//消息回调函数
14     wcex.cbClsExtra        = 0;//类的额外信息
15     wcex.cbWndExtra        = 0;//窗口的额外信息
16     wcex.hInstance        = hInstance;//窗口的实例句柄
17     wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_CLASS02));//图标
18     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);//光标
19     wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);//窗体的背景颜色
20     wcex.lpszMenuName    = MAKEINTRESOURCE(IDC_CLASS02);//窗体的菜单
21     wcex.lpszClassName    = szWindowClass;//窗口类名
22     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));//小图标
23 
24     return RegisterClassEx(&wcex);//系统函数返回一个系统的注册窗口类的函数调用
25 }

创建主

 1 //
 2 //   函数:  InitInstance(HINSTANCE, int)
 3 //
 4 //   目的:  保存实例句柄并创建主窗口
 5 //
 6 //   注释: 
 7 //
 8 //        在此函数中,我们在全局变量中保存实例句柄并
 9 //        创建和显示主程序窗口。
10 //
11 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
12 {
13    HWND hWnd;//窗口句柄
14 
15    hInst = hInstance; // 将实例句柄存储在全局变量中
16 
17 
18    //创建窗口
19    hWnd = CreateWindow(szWindowClass,//窗口类名 类名必须和注册名一致否则创建不成功
20        _T("第一个Windows窗口")/*szTitle*/,//窗口标题名 
21        //WS_OVERLAPPEDWINDOW,窗口风格
22        WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
23        /*
24                WS_OVERLAPPED:用于产生一个叠层窗口,都有标题栏和边框
25                WS_CAPTION:有标题栏的窗口
26                WS_SYSMENU:创建一个标题栏上具有系统菜单的窗口,需要ws_caption一起使用
27                WS_MINIMAZEBOX:创建具有最小化按钮窗口,必须有ws_system类型
28                WS_MAXIMIZBOX:创建具有最大化按钮的窗口,必须有ws_system类型。
29                WS_OVERLAPPEDWINDOW:创建有标题栏,系统菜单最大化最小化窗口
30                WS_POPUP            - 弹出式
31                WS_POPUPWINDOW      - 边框、弹出式、系统菜单
32                WS_SIZEBOX          - 带尺寸框的粗边框
33                WS_SYSMENU          - 系统菜单       
34        */
35       CW_USEDEFAULT,0, //窗口的左上角x,y坐标,注意:如果x坐标给的是CW_USEDEFAULT,y坐标给0表示去匹配x坐标(单位为像素)
36       CW_USEDEFAULT, 0,//窗口的宽高,同上
37       NULL,//父窗口句柄
38       NULL,//菜单句柄,如果值为null,表示默认使用注册时加载的菜单,如果不为null,创建窗口时将用这个菜单替换掉注册时菜单
39       hInstance,//窗口实例句柄
40       NULL);//保留参数
41 
42    if (!hWnd)
43    {
44       return FALSE;
45    }
46 
47    ShowWindow(hWnd, nCmdShow);//显示窗口 
48    UpdateWindow(hWnd);//更新窗口
49 
50    return TRUE;
51 }

处理主窗口消息

 1 //  函数:  WndProc(HWND, UINT, WPARAM, LPARAM)
 2 //
 3 //  目的:    处理主窗口的消息。
 4 //
 5 //  WM_COMMAND    - 处理应用程序菜单
 6 //  WM_PAINT    - 绘制主窗口
 7 //  WM_DESTROY    - 发送退出消息并返回
 8 //
 9 //
10 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
11 {
12     int wmId, wmEvent;
13     PAINTSTRUCT ps;
14     HDC hdc;
15 
16     switch (message)
17     {
18     case WM_COMMAND:
19         wmId    = LOWORD(wParam);
20         wmEvent = HIWORD(wParam);
21         // 分析菜单选择: 
22         switch (wmId)
23         {
24         case IDM_ABOUT:
25             DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
26             break;
27         case IDM_EXIT:
28             DestroyWindow(hWnd);
29             break;
30         default:
31             return DefWindowProc(hWnd, message, wParam, lParam);
32         }
33         break;
34     case WM_PAINT:
35         hdc = BeginPaint(hWnd, &ps);
36         // TODO:  在此添加任意绘图代码...
37         EndPaint(hWnd, &ps);
38         break;
39     case WM_DESTROY:
40         PostQuitMessage(0);
41         break;
42     default:
43         return DefWindowProc(hWnd, message, wParam, lParam);
44     }
45     return 0;
46 }
47 
48 // “关于”框的消息处理程序。
49 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
50 {
51     UNREFERENCED_PARAMETER(lParam);
52     switch (message)
53     {
54     case WM_INITDIALOG:
55         return (INT_PTR)TRUE;
56 
57     case WM_COMMAND:
58         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
59         {
60             EndDialog(hDlg, LOWORD(wParam));
61             return (INT_PTR)TRUE;
62         }
63         break;
64     }
65     return (INT_PTR)FALSE;
66 }

 

窗口

 

上一篇:mybatis源码分析:


下一篇:Win10 OS安装(配置)MySQL(5.7解压版)