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编程入门之二十六(常用控件:滚动条控件ScrollBar)