003_Windows程序设计--窗口与消息
来源:互联网 发布:安装ubuntu系统 编辑:程序博客网 时间:2024/05/20 23:07
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
0 0
- 003_Windows程序设计--窗口与消息
- windows程序设计--窗口与消息
- Windows程序设计--窗口与消息
- 《Windows程序设计》读书笔记之窗口与消息
- windows程序设计:第三章:窗口与消息
- 001_Windows程序设计--起步
- 002_Windows程序设计--Unicode
- windows程序设计学习笔记(第三章) 窗口与消息
- [学习笔记]Windows程序设计:第三章 窗口与消息
- Windows程序设计_Chap03_窗口与消息_学习笔记
- Windows程序设计_Chap03_窗口与消息_学习笔记
- 《Windows程序设计》读书笔三 窗口与消息
- Windows程序设计 窗口和消息
- Windows程序设计-窗口和消息
- windows窗口与消息
- 03.窗口与消息
- 1.窗口与消息
- Chapter03 窗口与消息
- BZOJ4246: 两个人的星座
- uC/OS-ii系统内核理解(三)_初始化调用函数
- 文件特殊权限:SUID,SGID和SBIT
- ReactJS component names must begin with capital letters?!
- Codeforces 765F. Souvenirs
- 003_Windows程序设计--窗口与消息
- C++静态链接库
- 类加载机制
- QQ第三方登录实例demo(QQSDK包优化)
- 二十四节气的计算方法
- Spring Boot 静态资源处理
- Poj 1094 Sorting It All Out 【拓扑排序】
- Redis常用的命令(一)-------启动、配置等
- C#DATAGRIDVIEW 清空所有行方法