MyException - 我的异常网
当前位置:我的异常网» VC/MFC » WM_MOUSEMOVE是否会触发重绘?

WM_MOUSEMOVE是否会触发重绘?

www.MyException.Cn  网友分享于:2013-09-27  浏览:82次
WM_MOUSEMOVE是不是会触发重绘??
本帖最后由 a8239224 于 2013-09-22 11:29:47 编辑
在CVIEW中的ONMOUSEMOSE()中通过消息调用了CFRAME中的ONSIZE() 鼠标移动时可以改变并且重绘CFRAME

void CLightView::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default

if(m_isstartpaint == TRUE)
{
m_oldPoint.x+=point.x-m_startPoint.x;
m_oldPoint.y+=point.y-m_startPoint.y;

m_startPoint = point;

Invalidate(TRUE);
UpdateWindow();
SendMessage(WM_PAINT,0,0);//或者GetParent()->SendMessage(WM_SIZE,0,0) 用来触发CFRAME的ONSIZE()
}

if((m_changeSize==TRUE)&&(m_isstartpaint == FALSE)) //控制图形大小改变
{
AddPoint.x+=point.x-m_startPoint.x;
AddPoint.y+=point.y-m_startPoint.y;
m_startPoint = point;
Invalidate(TRUE);
UpdateWindow();
SendMessage(WM_PAINT,0,0);//或者GetParent()->SendMessage(WM_SIZE,0,0) 用来触发CFRAME的ONSIZE()
}


CView::OnMouseMove(nFlags, point);
}


然后使用双击OnLButtonDblClk() 改变 图形形状时候 却不会跟着视图改变



白色区域是CFRAME的控制了框架的特殊形状,红色是CVIEW绘制的



void CLightView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
PaintStyle++;
if(PaintStyle == 4)
PaintStyle=1;

Invalidate(TRUE);
UpdateWindow();
SendMessage(WM_PAINT,0,0);//或者GetParent()->SendMessage(WM_SIZE,0,0) 用来触发CFRAME的ONSIZE()

CView::OnLButtonDblClk(nFlags, point);
}

改变了形状大小 视图的可以改变但是框架的没有改变


需要再次点击下 黑色区域 白色的形状才会跟着改变,这是个重绘的问题。

框架 重绘

------解决方案--------------------
你分别在OnMouseMove/OnDraw函数中TRACE出log来看看就清楚会不会走到OnDraw/OnPaint()函数中了吧~
------解决方案--------------------

文章评论