首页 > 学院 > 开发设计 > 正文

003_Windows程序设计--窗口与消息

2019-11-08 19:43:46
字体:
来源:转载
供稿:网友

Windows编程模型

事件驱动编程模型 一切都是窗口:窗口和句柄 消息与消息队列 设计->注册->创建->显标更新->消息。

#include <windows.h>//窗口过程回调函数 H是Handler的简写,句柄LRESULT CALLBACK WndPRoc(HWND,UINT,WPARAM,LPARAM);//相当于 int main()// 实例句柄int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow){ HWND hwnd;//窗口句柄 MSG msg;//消息 WNDCLASS wc;//窗口类 //1.设计一个窗口类 wc.style = 0; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName = NULL; wc.lpszClassName = TEXT("MyWndClass"); //2.注册窗口类 RegisterClass(&wc); //3.创建窗口 hwnd = CreateWindow( TEXT("MyWndClass"), TEXT("Hello SDK application"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL,//父窗口句柄 NULL,//窗口菜单句柄 hInstance, NULL); //4.显示和更新窗口 ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); //5.消息循环 while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg);//转发到窗口过程 } return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ PAINTSTRUCT ps; HDC hdc;//DC句柄 RECT rect; //对各种消息进行处理 switch(message) { case WM_SIZE: //重画 Paint return 0; case WM_LBUTTONDOWN: //MessageBox(hwnd,TEXT("Mouse Clicked!"),TEXT("消息"),MB_OK); //PostQuitMessage(0); return 0; case WM_PAINT: //绘制消息 hdc = BeginPaint(hwnd,&ps); GetClientRect(hwnd,&rect); //Ellipse(hdc,0,0,200,100); DrawText(hdc,TEXT("Hello, Windows!"),-1,&rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint(hwnd,&ps); return 0; case WM_DESTROY://销毁窗口消息(关闭) PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,message,wParam,lParam);}

句柄

handle HINSTANCE//模块句柄 HWND //窗口句柄 HDC //画布句柄 HICON //图标句柄 HCURSOR //光标句柄 HBRUSH //画刷句柄

数据结构

WNDCLASS 窗口类

typedef struct _WNDCLASS {UINT style; // 窗口类型WNDPROC lpfnWndProc; //窗口处理函数int cbClsExtra; //窗口扩展int cbWndExtra; //窗口实例扩展HINSTANCE hInstance; //实例句柄HICON hIcon; //窗口的最小化图标HCURSOR hCursor; //窗口鼠标光标HBRUSH hbrBackground; //窗口背景色LPCTSTR lpszMenuName; //窗口菜单LPCTSTR lpszClassName; // 窗口类名} WNDCLASS, *LPWNDCLASS;

MSG 消息结构

typedef struct tagMSG{ HWND hwnd; 窗口句柄(索引内存当中的资源) UINT(无符号整型) message; WPARAM(整型) wParam; //关于消息的附加参数,例如:按下一个键,具体是哪个按键 LPARAM(整型) LParam; //关于消息的附加参数 DWord(32位整数) time;//消息被传递时候的时间 POINT(坐标结构体) pt; //消息被传递时候,光标在屏幕上的位置} MSG;

PAINTSTRUCT画布结构

typedef struct tagPAINTSTRUCT { HDC hdc;//用于绘制的句柄 BOOL fErase;//如果为非零值则擦除背景,否则不擦除背景 RECT rcPaint;//通过制定左上角和右下角的坐标确定一个要绘制的矩形范围,该矩形单位相对于客户区左上角 BOOL fRestore; BOOL fIncUpdate; BYTE rgbReserved[32];} PAINTSTRUCT, *PPAINTSTRUCT;

RECT 矩型结构

typedef struct tagRECT{LONG left; //指定矩形左上角的X坐标LONG top; //指定矩形左上角的Y坐标LONG right; //指定矩形右下角的X坐标LONG bottom;//指定矩形右下角的Y坐标} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;

匈牙利标记法

控件命名: fm 窗口 cmd 按钮 cob combo,下拉式列表框 txt 文本输入框 lab labal,标签 img image,图象 pic picture grd Grid, 网格 scr 滚动条 lst 列表框 frm fram变量命名: a 数组 b 布尔 by 字节 ch char,TCHAR f 浮点 d 双精度浮点 h handle,句柄 i int n 无符号整形 p 指针 sz 0结尾的字符串 str CString fn 函数 v 无类型 w word dw dword x,y 坐标 Max 最大 Min 最小 Init 初始化 T and Temp 临时变量 资源名字定义格式: 菜单:IDM_XX或者CM_XX 位图:IDB_XX 对话框:IDD_XX 字符串:IDS_XX DLGINIT:DIALOG_XX ICON:IDR_XX
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表