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 }
窗口