Windows 编程基础知识
来源:互联网 发布:c语言清华大学出版社 编辑:程序博客网 时间:2024/05/16 12:21
MSG Structure:
typedef struct tagMSG { // msg HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt;} MSG;消息类参数说明:
hwnd:窗口资源句柄
message:消息名称,采用宏定义的无符号整形
wParam、lParam:消息附加参数:如键盘按下产生一个WM_CHAR消息,具体按下那个键则由附加参数说明
time:标识消息产生时间
pt:结构体变量,标识产生消息时光标位置
WNDCLASS Structure:
typedef struct { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName;} WNDCLASS, *PWNDCLASS;
窗口类参数说明:
style:窗口类类型(可选CS_HREDRAW水平重画,CS_VREDRAW垂直重画等,windows中有宏定义,数值特殊位为1其余为0,可进行按位与或非运算)
lpfnWndProc:窗口过程函数(回调函数),接收函数指针,程序员只提供函数代码块的编写,不负责函数的调用,由操作系统在从消息队列中捕获窗口消息后、进行消息处理时调用
3、4参数分别为类和窗口的附加内存,通常情况下设为0
hInstance:当前应用程序实例号,用WinMain()函数中的形参赋值,具体数值有操作系统分配
hIcon:用LoadIcon()函数赋予初值
hCursor:用LoadCursor()赋值
hbrBackground:由GetStockObject()获得,该函数retrieves a handle to one of the stock pens, brushes, fonts, or palettes
消息循环:
MSG msg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
TranslaMessage():将相关消息进行转换:例如将WM_KEYUP,WM_KEYDOWN消息转化为WM_CHAR消息,不影响原来消息,只产生新的消息
DispatchMessage():将收到消息传到窗口过程函数中处理,等价于将消息路由给操作系统
Windows应用程序消息循环机制:1.应用程序创立2.操作系统为该应用程序分配一个消息队列3.应用程序利用GetMessage()函数从消息队列中取出消息4.TranslaMessage(),DispatchMessage()将消息转换路由给操作系统
窗口过程函数(回调函数):
WindowProc:
<pre name="code" class="cpp">LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
回调函数中用swith()语句对不同消息进行判断处理,对无关消息采用缺省DefWindowProc()函数进行处理,常见的消息:WM_PAINT(只能用Begin_Paint和End_Paint对设备上下文进行关联)WM_CHAR,WM_LBUTTONDOWN,WM_CLOSE,WM_DESTORY(采用PostQuitMessage(0)传递一个消息退出代码压入消息队列,当GetMessage()获取WM_QUIT消息时,返回0,退出WinMain中上述while循环)等等...
函数调用约定_stdcall与_cdecl的区别:
函数参数传递顺序与堆栈清除机制不同,除可变参数的api函数调用外,一般函数均采用_stdcall方式,不同编译器的默认编译选项(stdcall和cdecl)会有差异,需注意
- windows 应用程序编程基础知识
- windows内核编程基础知识
- Windows 编程基础知识
- Windows网络编程基础知识
- 多线程编程基础知识(windows)
- 1.Windows核心编程-基础知识
- Windows 64位编程的基础知识要点
- 转至windows核心编程 线程的基础知识
- windows网络编程之Select模型基础知识
- windows sock 网络编程基础知识--基本TCP套接字编程
- Windows核心编程 第六章 线程基础知识 (上)
- Windows核心编程 第六章 线程基础知识 (下)
- 编程基础知识
- 编程基础知识
- 编程基础知识
- Windows Mobile基础知识普及
- Windows Mobile开发基础知识
- Windows Mobile开发基础知识
- 深入分析 Linux 内核链表
- C#1-100不重复的随机数
- collect2: error: ld returned 1 exit status
- Java-Excel Sheet Column Title
- 学习记录
- Windows 编程基础知识
- intent传值方式
- 【数据结构】排序算法总结
- 天下3内测绝版序列号
- 致网友Wonderfei的一封信(如何选择自动化框架的几点拙见)
- android menu 基础
- 简单利用viewpagerindicator的两个类,而非整个工程实现程序引导页
- 添加tab标签
- XML格式统一解析