重绘ComboBox

羽飞 2011-04-13 07:18:50
//这是WM_PAINT消息的处理
void CMyComboBox::OnPaint()
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here

CRect rcClient;
GetClientRect(&rcClient);

// Let the window do its default painting...
CWnd::DefWindowProc( WM_PAINT, (WPARAM)dc.GetSafeHdc(), 0 );

// Do not call CComboBox::OnPaint() for painting messages
}
void CMyComboBox::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (FALSE == m_bOver)
{
m_bOver = TRUE;
SetCapture(); //捕获鼠标以监视鼠标是否已经离开编辑框
Invalidate();
}

CRect rcClient;
GetClientRect(&rcClient);
if (rcClient.PtInRect(point) == FALSE)
{
m_bOver = FALSE;
GetParent()->Invalidate();
ReleaseCapture();
}

CComboBox::OnMouseMove(nFlags, point);
}
BOOL CMyComboBox::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;
}


这样绘制下拉框会有问题,就是点击右边那个按钮的时候,下拉框总是显示一下就消失了,很是不明白
关于控件自绘的东西不是很理解,希望高手指点一下
答案好,我加分
...全文
127 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
羽飞 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]

你要判断鼠标进入和离开可以处理WM_MOUSEHOVER、WM_MOUSELEAVE, _TrackMouseEvent()
[/Quote]
我曾经在重绘Edit控件时发现_TrackMouseEvent()不能用,应该是某些控件不支持,在重绘ListCtrl和Button时这个函数可以用
还想请教各位大侠,为什么不能用SetCapture函数,给个解释?
TandyT 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]
你要判断鼠标进入和离开可以处理WM_MOUSEHOVER、WM_MOUSELEAVE, _TrackMouseEvent()
[/Quote]

yeah
Eleven 2011-04-13
  • 打赏
  • 举报
回复
你要判断鼠标进入和离开可以处理WM_MOUSEHOVER、WM_MOUSELEAVE, _TrackMouseEvent()
Eleven 2011-04-13
  • 打赏
  • 举报
回复
去掉OnMouseMove()函数中的SetCapture,和ReleaseCapture函数的调用

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧