在对话框中响应CDialog::OnLButtonDown(nFlags, point);与CDialog::OnLButtonUp(nFlags, point);CDialog::OnMouseMove(nFlags, point);这三个事件,给个例子,比着这个改一下。
先定义BOOL m_bMove=false;
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_ptOrigin=point;
m_ptOld=point;
m_bMove=TRUE;//保存这个坐标点
CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//画出连续的带有颜色的线
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));//创建一个画笔
CPen *pOldPen=dc.SelectObject(&pen);//选到一个设备描述表中
if(m_bMove==TRUE)
{
dc.MoveTo(m_ptOrigin);//划线时先把移动到原点
dc.LineTo(point); //划到线的终点
m_ptOrigin=point; //连续划线就要将线的终点重设为下一次线的起点
}
dc.SelectObject(pOldPen);*/ //释放
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bMove=FALSE;
CView::OnLButtonUp(nFlags, point);
}
CDialog 没有刷新,要么 把静态框去掉,要么从CWnd派生一个类,在类的 OnPaint里画
OnPaint是给你更新当前窗口的不是给你画控件的。所以你的方法是错误的
对于Static控件(picurebox也算吧?),首先要给它设置一个style叫“SS_OWNERDRAW”(在对话框编辑器里面,应该可以给它勾上这个属性)
然后主窗体在控件需要绘制的时候会收到WM_DRAWITEM消息,这个DRAWITEM就相当于WM_PAINT,只不过是给你画控件不是给你画自己的。这个消息的lParam是一个DRAWITEMSTRUCT类型的结构体,里面有一个hDC你可以拿来创建CDC对象然后在上面进行绘制。