windows编程学习笔记(2)窗口过程函数
来源:互联网 发布:炫浪网络社区怎么了 编辑:程序博客网 时间:2024/06/14 04:12
一.窗口过程函数
窗口过程函数是“真正干活的函数”,系统和用户所产生的各种消息,最后都要通过调用这个函数来进行处理。
定义如下:
LRESULT CALLBACK WindowProc
(
HWND hwnd, // 窗口句柄
UINT uMsg, //消息
WPARAM wParam, // 附加信息1
LPARAM lParam // 附加信息2
);
Win32api编程,对窗口的操作,都是应用窗口过程函数这个回调函数进行操作的。通过GetMessage函数获取到了一个消息,然后通过DispatchMessage函数派发出去,WindowProc函数中对接受到的消息进行相应。在窗口过程函数中通过一个switch结构,对不同的消息进行相应的处理,如果没有要处理的消息,就执行DefWindowProc这个默认的窗口过程函数。
<pre name="code" class="cpp">//窗口过程函数LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){HDC hdc = NULL;switch(message){case WM_PAINT://绘图消息hdc = GetDC(hwnd);TextOut(hdc, 100, 100, L"hello Windows", strlen("hello Windows"));ReleaseDC(hwnd, hdc);break;case WM_KEYDOWN://处理键盘消息if (wParam == 'Q')DestroyWindow(hwnd);break;case WM_DESTROY://当有关闭消息时PostQuitMessage(0);break;default:return DefWindowProc(hwnd, message, wParam, lParam);//默认窗口过程函数}return 0;}
程序运行结果如下图:
二.WM_XXX消息
消息的形式上一节已经说过,在窗口过程函数中,各种消息都采取WM_XXX的形式表示(即WINDOW MESSAGE),比如WM_PAINT,WM_COMMAND等等。
那么这个消息到底是什么呢,在VS中,我们选中一个消息,点击转到定义处,就可以看到如下的定义:
原来这些消息都是一些十六进制的数字。用这样的一个宏定义,为每个消息定义一个便于我们理解的表示符,这样,我们在编程的时候就不需要记忆那些枯燥无味的数字,而是用这些从字面上就能理解的字符。
窗口过程函数在处理的时候,通switch函数,针对不同的WM_XXX消息,调用不同case中的代码,进而完成各种操作。
对于lParam和wParam,这两个参数中保存的是消息中的附加信息,比如:
WM_LBUTTONDOW这个消息
就需要用lParam参数来传递鼠标位置信息。
<pre name="code" class="cpp"><span style="white-space:pre"></span>point.x=LOWORD(pMsg->lParam);//LOWORD取低位 后面四位 相对于客户窗体左上角的X偏移值 <span style="white-space:pre"></span>point.y=HIWORD(pMsg->lParam);//HIWORDs取高位 前面四位 相对于客户窗体左上角的Y偏移值
- windows编程学习笔记(2)窗口过程函数
- Windows编程学习笔记 lesson2 窗口创建
- Windows编程学习笔记 lesson3 窗口创建
- windows程序设计 窗口过程函数
- 2013.7.31 学习笔记《windows核心编程》(五) 窗口注册
- 2013.8.1 学习笔记《windows核心编程》(六) 窗口创建
- windows编程学习笔记(1)创建窗口与消息循环
- WINDOWS游戏编程学习笔记(二):完整创建一个窗口
- 达内学习笔记---win32编程窗口函数
- windows学习笔记1 窗口
- 2013.8.3 学习笔记《windows核心编程》(七) 窗口类,窗口显示更新与消息
- QT学习记录二 (windows窗口创建过程)
- Windows核心编程笔记(二十) 窗口与消息
- Windows程序编程(2):窗口创建
- windows编程学习笔记
- windows编程学习笔记
- SDK学习笔记2-一个Win32窗口程序实现过程
- Windows核心编程笔记(二十) 窗口与消息2
- Android 软件开发之如何使用Eclipse Debug调试程序详解
- 100万并发连接服务器笔记之1M并发连接目标达成
- XCode快捷键
- 报刊杂志 App 的 Info.plist 必须包含 UINewsstandApp.error.message=true,以及 CFBundleIcons.UINewsstandIcon 字典
- 指针和引用的联系与区别
- windows编程学习笔记(2)窗口过程函数
- Android静态变量的生命周期
- 将数据从一个用户转移到另一个用户下
- 使用非java代码编程
- mysql中的load data infile用法
- sqlserver2005发布与订阅配置步骤
- Shell脚本入门(十) - 函数
- public,private,protected,friendly
- Linux--串口通信详解