windows程序设计笔记:显示文字

本文介绍了Windows程序设计中关于显示文字和图形的基本原理,包括WM_PAINT消息的触发情况、如何处理WM_PAINT消息、TextOut函数的使用、设备内容的概念以及滚动条的处理。通过TextOut函数在窗口上绘制文字,讨论了设备内容句柄的获取与释放,并讲解了如何调整滚动条的范围和位置。
摘要由CSDN通过智能技术生成

绘制和更新

Windows中,只能在窗口的显示区域绘制文字和图形,Windows是一个消息驱动系统。它通过把消息投入应用程序消息队列中或者把消息发送给合适的窗口消息处理程序,将发生

的各种事件通知给应用程序。Windows通过发送WM_PAINT消息通知窗口消息处理程序,窗口的部分显示区域需要绘制。

1. WM_PAINT消息

2.1以下情况窗口消息处理程序会接收到一个WM_PAINT消息:

1. 移动窗口或显示窗口时,窗口中先前被隐藏的区域重新可见。

2. 改变窗口的大小(如果窗口类别样式有着CS_HREDRAWCS_VREDRAW位旗标的设定)。

3. 程序使用ScrollWindowScrollDC函数滚动显示区域的一部分。

4. 程序使用InvalidateRectInvalidateRgn函数刻意产生WM_PAINT消息。

2.2以下情况下,Windows可能发送WM_PAINT消息:

1.   Windows擦除覆盖了部分窗口的对话框或消息框。

2.   菜单下拉出来,然后被释放。

3.   显示工具提示消息。

2.3以下情况,Windows总是保存它所覆盖的显示区域,然后恢复它

1.   鼠标光标穿越显示区域。

2.   图标拖过显示区域。

2.3有效矩形和无效矩形

在擦除对话框之后,需要重画的只是先前被对话框遮住的矩形区域,这个区域称为「无效区域」或「更新区域」。只有在显示区域的某一部分失效时,窗口才会接受WM_PAINT消息。

如果在窗口消息处理程序处理WM_PAINT消息之前显示区域中的另一个区域变为无效,则Windows计算出一个包围两个区域的新的无效区域(以及一个新的无效矩形),并将这种变化后的信息放在绘制信息结构中。Windows不会将多个WM_PAINT消息都放在消息队列中。

TextOut

VS2005默认是Unicode的,在VC 6.0中编译成功的项目在VS2005中常会出现类型错误。

       经常出现的错误是:不能从const char *转换为LPCWSTR

 

如使用CreateDC("DISPLAY",NULL,NULL,NULL)就会报错,如果使用强制转换(LPCWSTR"DISPLAY",虽然能够通过,但是编码会出错。可行的办法是使用 TEXT("DISPLAY")转换,

TextOut(hdc,50,50,TEXT("xfate"),strlen("xfate"));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值