- 1、本文档共138页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows的发展;Windows的特点;编程示例;编程示例;Windows程序的组成;MessageBox简介;Visual c++ 6.0 使用介绍;Unicode简介;常用编码;ASCII;Unicode码;字节序;窗口与消息;MessageBox功能有限,用CreateWindow生成全功能的窗口
窗口的“控件”(或称“子窗口控件”):标题栏、菜单栏、工具栏、 滚动条、按钮(单选、复选)、列表框、文本框等
消息(操作系统和用户程序的分工合作)
窗口结构(“窗口类”)
面向对象VS操作系统中的结构
多个窗口可用同一个窗口类
窗口过程
;客户区域
无效:窗口首次创建、窗口大小变化、窗口重叠
重绘
UpdateWindow会发一条消息WM_PAINT
队列消息和非队列消息
Send(一般是调用特定windows函数)和Post(同步和异步)
;窗口过程
Hwnd
Message
wParam
lParam
GetMessage 函数从消息队列获得一个消息并将它复制到MSG结构。
遇到WM_QUIT消息,返回0然后结束循环
其它返回非0值
DispatchMessage 函数分发消息到MSG结构中的窗口句柄关联的窗口过程。
工程/设置/链接
工程选项:subsystem:console和subsystem:windows
对象/库模块:winmm.lib,且hellowin.wav位于当前目录(演示:用快捷方式的当前位置)
;/mydomain/archive/2011/02/24/1963948.html;/mydomain/archive/2011/02/24/1963948.html;/mydomain/archive/2011/02/24/1963948.html;文本输出;客户区域的大小和用户的操作有关
字符尺寸会影响图形尺寸
很多绘图函数和设备无关
重绘工作由程序自己负责
;以下情况会产生WM_PAINT消息,由程序来处理重绘工作:
用户移动窗口
用户调整窗口大小
程序调用ScrollWindow或ScrollDC函数(水平和垂直滚动一个位矩形)
程序调用InvalidateRect或InvalidateRgn函数(会产生WM_PAINT消息)
以下情况,Windows会处理重绘工作:
鼠标指针在客户区域内移动
在客户区内拖动图标
“调用”重绘:想办法生成WM_PAINT消息;需要重绘的部分
自动产生WM_PAINT消息
无效矩形:覆盖无效区域的最小矩形
InvalidateRect函数会强制一矩形失效
获得无效区域的坐标
窗口过程收到WM_PAINT消息时
任何时候可调用GetUpateRect
不会连续产生WM_PAINT消息
;调用BeginPaint函数,客户区域变成有效
调用ValidateRect函数,使指定区域有效
??不再存在无效区域,则删除消息队列中的WM_PAINT消息
;输出文本也是用GDI函数
常用:TextOut(hdc,x,y,psText,iLength)
Hdc:设置环境句柄
X,y:坐标,单位是像素
psText: 字符串指针
iLength:字符数
Hdc是GDI函数都需要的;在同一条消息的处理中完成句柄的获取和释放(CreateDC除外)
设备环境句柄获取方式一
BeginPaint获取句柄,并填充绘制信息结构,自动使客户区域有效,裁剪区域是原无效区域
EndPaint释放句柄
可在调用BeginPaint之前调用InvalidateRect(hwnd,NULL,TRUE)以扩大裁剪区域至整个客户区,最后的参数TRUE表示需要擦除背景
设备环境句柄获取方式二
GetDC,获取句柄,裁剪区域是整个客户区,不进行区域有效化
ReleaseDC,释放句柄
validateRect(hwnd,NULL),使整个客户区有效化
避免死循环:若不自己处理重绘,则要调用DefWindowProc
;返回的设备环境句柄是整个窗口
可对标题栏(在窗口客户区之外)等进行处理
消息是WM_NCPAINT
;用GetSystemMetrics获取用户界面尺寸
用GetTextMetrics获取字体尺寸
TEXTMETRIC tm;
hdc = GetDC(hwnd);
GetTextMetrics(hdc,tm);
ReleaseDC(hwnd,hdc);
;高度
;宽度
tmAveCharWidth 小写字符的加权平均宽度
tmMaxCharWidth 最宽的字符宽度
大写字符的平均宽度的估计: 1.5 * tmAveCharWidth
;不同消息处理代码之间共享的变量,只能是global或static
典型代码
;滚动条;CreateWindow 的参数指定 WS_VSCROLL以产生滚动
您可能关注的文档
最近下载
- 人教版英语八年级上Unit3整单元课件(共190张ppt).ppt
- 茶叶加工工(高级、三级)理论考试复习题库(含答案).docx
- 数据通信基础认知—数据通信系统的基本概念.pptx
- 2024年宠物食品行业分析报告:从零食到主粮,从代工依赖到海内外均衡发展.pdf
- 床上用品供货及售后服务方案.docx VIP
- 一种双偏振雷达降水优化反演方法.pdf VIP
- 亲子农场体验园设计.pptx
- 刘京焕财政学模拟测试题.doc VIP
- 荣威-360-产品使用说明书-荣威360PLUS 1.5L 自动尊享版-CSA7154ADAC-荣威360用户手册-2018.7.11.pdf
- 财政学原理刘京焕陈志勇李景友第十章节.ppt
文档评论(0)