Windows 编程基础知识
2015-01-08 15:28
471 查看
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)会有差异,需注意
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 Communication Foundation 编程的基础知识
- Windows网络编程基础知识
- Windows 64位编程的基础知识要点
- 学习有关进行 Windows Communication Foundation 编程的基础知识
- windows 应用程序编程基础知识
- Windows内核安全编程基础知识(一)
- Windows_Program_Via_C_Translate_Win32编程的背景知识/基础知识_包括基本输入输出机制介绍
- Windows编程基础知识点
- 多线程编程基础知识(windows)
- Windows网络编程基础知识
- windows网络编程之重叠模型(OVERLAPPED I/O)基础知识
- Windows 64位编程的基础知识要点
- Windows API编程(一)最基础的知识介绍:Windows编程基础
- ASP.NET中Cookie编程的基础知识
- ASP.NET中Cookie编程的基础知识
- ASP.NET中Cookie编程的基础知识
- Windows编程基础
- ASP.NET中Cookie编程的基础知识(6)
- ASP.NET中Cookie编程的基础知识(二)
- ASP.NET中Cookie编程的基础知识