📄 untitled-04.txt
字号:
该消息从消息队列中删除。因此,应用程序将一遍又一遍地处理同一个WM.PAINT消息而
陷入死循环。而通过分别从 CPaintDC的构造函数和析构函数中调用:: BeginPant和:: End-
Paint,CPaintDC能保证这种情况不会发生。
CClientDC和 CWindowDC类
Windows程序不是总将绘图限制在OnPaint上。如果您编写了这样一段应用程序,只要
一单击鼠标,应用程序就会在屏幕上画一个圆圈,那么你可能希望在接收到按钮单击消息时
立刻画圆,而不必等到WM—PAINT消息。
这正是MFC CClientDC类的目的。 CClientDC创建了可在 OnPaint外使用的用户区域设
备描述表。下面的消息处理程序使用了CClientDC和两个CDC成员函数,来完成了在鼠标
左键被单击时画一个X连接窗口客户区的四角的功能。
void CMainwindow::onLButtonDown(UINT "Flags,CPoint point)
5
CRect rect;
GetClientRect(&rect);
CClientDC dc(this);
dc.M。veTo(rect.left, rect.top);
dc.LineTo(rect.right, rect.bottom);
dc.MoveTo(rect.r。ght, rect.top);
dc.LineTo(rect。left,rect.bottom);
2
left,right,top和bottom是在MFC的CRect类中定义的公用成员变量,保存着矩形四边
的坐标值。MoveTo和lineTo是CClientDC从CDC继承来的画线函数。在后续的章节中,你
很快就会详细了解这两个函数。
如果您不仅要使用窗口客户区,还要使用非客户区(标题栏、窗口边框等),则MFC提供
有CWindowDC类。CWindowDC与CClientDC相类似,但它代表的设备描述表包含了窗口边
框之内的所有内容。有时程序员可以用CWindowDC创造特殊效果,例如用户自己绘制标题
栏和带圆角的窗口。一般情况下CWindowDC并不常用。如果想在窗口非客户区作图,您可
借助OnNcPaint处理程序捕获WM_NCPAINT消息,确定非客户区需要绘制的时间。与
onPaint不同,onNcPaint处理程序不需要(也不应当)调用BeginPaint和EndPaint。
更少见的场合是程序需要全屏幕的访问权。此时可创建CClientDC或CWndowDC对
象,并给其构造函数传送一个NULL指针。语句
CCI土entDC dc(miLL);
dc.Ellinse(0,0,IOO,100);
将在屏幕左上角画一个圆。屏幕截取程序经常使用全屏DC访问整个屏幕。很显然,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -