ClientDC和CPaintDC(5月26日)

 

今天还是继续昨天的事情:自己堆砌MFC。我在WM_PAINT的消息响应函数OnPaint()里面调用DC去drawtext,可是发现他老是重绘。于是找原因,原来是这样的:我用的是:
CRect rect;
 GetClientRect(&rect);
 CPaintDC myDC(this);// 这里不能用CClientDC,只有CPaintDC才能把WM_PAINT消息从消息联里面删除,否则用CClientDC会不断重绘
 myDC.DrawText(_T("nice to meet you"),&rect,DT_SINGLELINE| DT_CENTER|DT_VCENTER);
 //MessageBoxW(_T("hao la"),_T("my lover"),MB_OK|MB_YESNOCANCEL|MB_DEFBUTTON3);// MB_DEFBUTTON3用来指定第几个按钮为默认按钮
 
而这里要用CPaintDC,原因上面代码的注释里面已经说了,但是为什么只有 CPaintDC才能把消息从消息队列里面删除呢?其实准确的来说,从消息队列里面删除该消息的说法是不正确的,真正的原因在下面:
CPaintDC的构造函数中调用BeginPaint获得客户区重绘的DC,析构函数中调用EndPaint。这样就明白了吧,呵呵。在响应WM_PAINT消息时应调用或间接调用BeginPaint、EndPaint函数,使窗口变为“
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值