MFC解决EDIT控件滚动条滚动后,对话框顶部的文字重叠的问题

Posted wuhuan027

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC解决EDIT控件滚动条滚动后,对话框顶部的文字重叠的问题相关的知识,希望对你有一定的参考价值。

问题描述:MFC EDIT控件的滚动条滚动后,对话框顶部的文字重叠。

解决方法:捕获滚动事件,在定时器中重绘文字重叠区域。

主要实现代码:

 1 HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
 2 {
 3     if(pWnd->GetDlgCtrlID() == IDC_EDIT_XXX)   
 4     {  
 5 
 6         int nVertPos = GetDlgItem(IDC_EDIT_XXX)->GetScrollPos(SB_VERT); //得到当前滚动条位置
 7         if(m_VscPos != nVertPos)
 8         {
 9             m_VscPos = nVertPos; // m_VscPos用来保存每次移动后的滚动条值,如果没有移动就不启动刷新
10             SetTimer(XXX_TIMER_ID, 10, NULL); // 滚动条变化一次就刷新一次
11         }
12     }
13 
14     return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);   
15 }
16 
17 void CMyDlg::OnTimer(UINT nIDEvent)
18 {
19     KillTimer(nIDEvent); //只允许定时器产生一条消息
20 
21     //重绘文字重叠区域
22     CRect Rc;      
23     GetDlgItem(IDC_EDIT_XXX)->GetWindowRect(&Rc);   
24     ScreenToClient(&Rc);   
25     InvalidateRect(Rc);  
26 }

在头文件声明函数:

1     afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
2     afx_msg void OnTimer(UINT nIDEvent);

实现文件中映射消息处理函数:

1 BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
2     //{{AFX_MSG_MAP(CMyDlg)
3     ON_WM_CTLCOLOR() 
4     ON_WM_TIMER()
5     //}}AFX_MSG_MAP
6 END_MESSAGE_MAP()

 

以上是关于MFC解决EDIT控件滚动条滚动后,对话框顶部的文字重叠的问题的主要内容,如果未能解决你的问题,请参考以下文章

MFC 控件编程之水平滚动条跟垂直滚动条

如何解决MFC单文档滚动条拖动时的重影问题(高分)

MFC编程入门之二十六(常用控件:滚动条控件ScrollBar)

VS2010-MFC(常用控件:滚动条控件Scroll Bar)

MFC中如何实现滚动条

求教:关于MFC控件中的滚动条事件........