Win32窗口程序(C++)
5409 点击·1 回帖
![]() | ![]() | |
![]() | 编者按:MFC替我们做了很多工作,学习下详细流程还是很必要的。 效果图: ![]() // Win32对话框.cpp : Defines the entry point for the application. // #include "stdafx.h" //定义窗口消息响应函数 LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HDC hdc; RECT rect; PAINTSTRUCT ps; //接收BeginPaint返回的客户区绘图信息 switch(uMsg)//接收GetClientRect返回的客户区坐标 { case WM_PAINT: { //指针参数一般代表接收函数的返回值,即_out hdc = BeginPaint(hwnd, ;ps); GetClientRect(hwnd, ;rect); DrawText(hdc, "http://hi.baidu.com/darks00n", -1, ;rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd, ;ps); break; } case WM_DESTROY: //窗口被关闭后终止对应线程 { PostQuitMessage(0); } default: break; } return DefWindowProc(hwnd, uMsg, wParam, lParam); //未处理的消息发给默认消息处理函数 } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //第一步.填充WNDCLASS结构体 WNDCLASS wndclass; wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "WND"; //第二步.注册窗口类 RegisterClass(;wndclass); //第三步.创建窗口 HWND hwnd = CreateWindow("WND", "Win32对话框", WS_OVERLAPPEDWINDOW , CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); //第四步.指定显示窗口状态 ShowWindow(hwnd, nCmdShow); //第五步.显示窗口(发送WM_PAINT消息) UpdateWindow(hwnd); //第六步.消息循环(不断从窗口线程消息队列中获取并处理消息) MSG msg; //返回值0代表WM_QUIT退出程序,-1代表获取消息失败 while (GetMessage(;msg, NULL, 0, 0) > 0 ) { //翻译消息(将虚拟键消息转换为字符消息后,再放回窗口消息队列中) TranslateMessage(;msg);//注意区分MFC中的PreTranslateMessage函数 //把消息发往消息响应函数(本例中即WndProc) DispatchMessage(;msg); } return msg.wParam; } | |
![]() | ![]() |
最新喜欢:
