如题,我是用VS 2005做的一个基于Dialog的程序,当我在我的程序中添加了SetTimer之后,在OnTimer这里打了个断点,但调试时始终不响应,进不了OnTimer这个函数内部。。不知道是不是因为我在程序中用了OnEraseBkgnd画背景的原因。唉,不知道为什么。开始以为是这个开发平台有问题,就另建了一个小程序,把SetTimer添加进去,并添加了WM_TIMER响应,这一次有用,是好的。代码太多了,贴上了不好看。看看各位有没有碰到这个情况。
解决方案 »
- “Windows下的GUI程序开发”疑惑。
- CListCtrl单击事件获得行号的问题
- <<<<<<<<<MFC里的两个CVIEW窗口的数据交互,急>>>>>>>>>
- 主窗口之外的模态对话框如何显示图标在任务栏?
- 再问属性页的问题?
- 为什么我用了一个TIMER以后我的CPU占用率就达到100%啊?
- 有CserialPortEx类的朋友请把源代码发给我,谢谢;
- 使用CSocket和SOCKET API有什么区别吗?为什么好多人都说CSocket没SOCKET好用?
- 我想做一个简单的绘图程序有谁可以帮我?
- 请各位高手指点,程序如何自动向IE的EDIT控件写入密码和用户名?
- Xtreme Toolkit Pro 的docking pane中如何添加图片?
- mfc多文档中怎么获得文档指针?
或是你在处理其他窗口消息影响到了这个Dialog的消息
后来想在对话框上放一个类似QQ游戏登陆时的滚动条动画,就想在程序里加了一个定时器来实现。然后现在的问题是OnTimer接受不到消息。唉,郁闷啊,头都大了。class CMyDialog:CDialog 对话框,OnEraseBkgnd画背景
|
|-class CMyPicture:CStatic 图形控件
|-class ......
问题出在你的CMyComboBox::OnPaint()里面。
把
CDC * pDC=this->GetDC();
改成
PAINTSTRUCT ps;
CDC* pDC = BeginPaint(&ps);
把
ReleaseDC(pDC);
改成
EndPaint(&ps);
就可以了。
第一种情况显示出来的字很正常。
case WM_PAINT:
gdc = BeginPaint (hwnd, &ps);
TextOut (gdc, 0, 0, s, strlen (s));
EndPaint (hwnd, &ps);
break;
第二种情况显示的字不停闪烁。
case WM_PAINT:
gdc = GetDC (hwnd);
TextOut (gdc, 0, 0, s, strlen (s));
ReleaseDC (hwnd, gdc);
break;BeginPaint() 和EndPaint() 可以删除消息队列中的WM_PAINT消息,并使无效区域有效。
GetDC()和ReleaseDC()并不删除也不能使无效区域有效,因此当程序跳出 WM_PAINT 时 ,无效区域仍然存在。系统就回不断发送WM_PAINT消息,于是程序不断处理WM_PAINT消息。