- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
章窗口消息处理.doc
03章 窗口消息处理
Windows窗口就是通过消息来与操作系统互动,窗口不能直接与使用者交流,使用者移动鼠标、敲键盘都是通过操作系统与窗口通信的,因此WinMain()函数中的消息循环很重要,没有它窗口便不能工作,而窗口消息处理函数更为重要,也是我们编程的主要对象。
一、消息循环
消息循环共用到3个函数,GetMessage()的返回值一直不为0,直到接受WM_QUIT时才为0(也就是false)。DispatchMessage()是将消息传给窗口消息处理函数。对初学者来说,这3个函数写法比较固定,小雅不作详细说明。因为内容多了反而把人的思想搞乱,但初学者不要认为只能这样写。
对消息的正确理解是比较关键的,不要编了很多程序,仍不知消息究竟是什么。我们一起看一下消息的结构体。
typedef struct {
HWND hwnd; //接受消息的窗口的句柄
UINT message; //消息(应用程序只能用低字节,高字节留给系统用)
WPARAM wParam; //消息的第一附加信息
LPARAM lParam; //消息的第二附加信息
DWORD time; //Specifies the time at which the message was posted.
POINT pt; //Specifies the cursor position, in screen coordinates, when the message was posted.
} MSG, *PMSG;
注意:上面消息循环中的三个函数用的消息是这个结构体的类型,而下面要阐述的消息处理函数的参数,用的是结构体中的第2-4元素即message、wParam、lParam。
二、消息处理函数
Windows中消息的种类大致有2种,即系统消息和应用程序消息,消息的前缀也多种多样。不过日常用到的消息大都以“WM_”开头,而且许多消息的wParam和lParam都为0(也就是不使用),一般只有“WM_COMMAND”菜单命令或键盘鼠标的消息才使用wParam和lParam。
Windows中消息虽然很多,但并不是每一消息都要编程处理,我们一般把不需要特别处理的消息交给缺省消息处理函数DefWindowProc(),例子中的default部分便是。另外,有一函数必须处理,也就是关闭窗口消息WM_DESTROY,这时必须调用PostQuitMessage(0)来向操作系统发送一条终止程序的消息。
#include windows.h
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL InitApp(HINSTANCE, LPCSTR);
BOOL InitInstance(HINSTANCE, LPCSTR, int);
//主入口函数
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
MSG msg;
char szClassName[] =DrawRect; //窗口名
//注册窗口类
if (!InitApp(hCurInst, szClassName))
return FALSE;
//初始化窗口
if (!InitInstance(hCurInst, szClassName, nCmdShow)) {
return FALSE;
}
//消息循环
while (GetMessage(msg, NULL, NULL, NULL)) {
TranslateMessage(msg); //消息解释
DispatchMessage(msg); //消息发送
}
return (int)msg.wParam;
}
用的最多的消息可能是WM_PAINT,当窗口改变大小、或有别的窗口从这个窗口面前经过,这个窗口中的文字或图案被冲掉,这就必须重新描画。因此,窗口中要显示的文字或图像一般都是在WM_PAINT中实现的。下面我们以在窗口上显示一行字作例子,不过,这时要稍微知道一点GDI(Graphic Device Interface)的知识。
三、GDI的基础知识
要在窗口描画文字或图像,首先要先取得设备文本(Device Contexts)
您可能关注的文档
最近下载
- 《项目1中华优秀传统文化我知道》(教学设计)-2024-2025学年河北大学版2024小学信息技术三年级全一册.docx VIP
- 物流配送路径优化研究.docx
- 久溪威士忌酒生产项目环境影响报告.pdf
- 2025年环境影响评价工程师之环评技术方法考试题库word.docx VIP
- 文学类文本阅读之“文学短评类”试题规范解答指导.docx VIP
- HELEN新概念第二册第41课.ppt
- (一模)泰安市2025届高三一轮检测语文试卷(含标准答案).docx
- 2024年贵阳市贵安新区产业发展控股集团有限公司招聘笔试参考题库附带答案详解.pdf
- 2024年袋鼠数学竞赛Level-C (5-6年级) 真题含、解析.pdf
- 2025年PMP项目管理师考试重点难点试题集详解.docx VIP
文档评论(0)