矩形你是根据鼠标的down与up来定的吧,你在up时再画矩形啊,应该只是你没处理好
解决方案 »
- MFC的小问题,关于TEXTDRAW函数的。
- CDC指针传递问题
- 在CButton的重载类里面如何得到该控件的ID?
- 关于控件的关联
- 求画图程序的undo与redo的实现(注意是象netmeeting白板一样的对象性画图)
- windows核心编程示例为什么通不过编译
- 为什么每次服务器方的CSocket类的receive函数总是收不到数据,在单步执行时也不能执行下去,就像被阻塞了一样
- 在CEdit或CRichEditCtrl中怎样设置一部分文本的背景色?
- 急,,,高手请进!
- 急问!如何在VC调用SQL的存储过程并得到返回值???
- GetClassInfo只能取出第一个注册的结构!如何取出第二个?
- 在OnInitDialog()中弹出模态对话框
void CAlphaWindowDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
m_ptDown = point;
m_rcPrev.SetRect(0, 0, 0, 0);
SetCapture();
}void CAlphaWindowDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
ClearRect(NULL);
ReleaseCapture();
}void CAlphaWindowDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if(nFlags & MK_LBUTTON)
{
CRect rc;
rc.SetRect(
min(point.x, m_ptDown.x),
min(point.y, m_ptDown.y),
max(point.x, m_ptDown.x),
max(point.y, m_ptDown.y)
);
ClearRect(&rc);
}
}
void CAlphaWindowDlg::ClearRect(LPRECT lpRect)
{
if(!m_rcPrev.IsRectNull())
{
CRgn rgn1, rgn2, rgn3, rgn4;
rgn1.CreateRectRgn(m_rcPrev.left, m_rcPrev.top, m_rcPrev.right, m_rcPrev.top+1);
rgn2.CreateRectRgn(m_rcPrev.left, m_rcPrev.bottom-1, m_rcPrev.right, m_rcPrev.bottom);
rgn3.CreateRectRgn(m_rcPrev.left, m_rcPrev.top, m_rcPrev.left+1, m_rcPrev.bottom);
rgn4.CreateRectRgn(m_rcPrev.right-1, m_rcPrev.top, m_rcPrev.right, m_rcPrev.bottom);
rgn1.CombineRgn(&rgn1, &rgn2, RGN_OR);
rgn1.CombineRgn(&rgn1, &rgn3, RGN_OR);
rgn1.CombineRgn(&rgn1, &rgn4, RGN_OR);
RedrawWindow(NULL, &rgn1);
}
if(!lpRect || ::IsRectEmpty(lpRect))
{
return;
}
CClientDC dc(this);
dc.DrawFocusRect(lpRect);
m_rcPrev = *lpRect;
}
用双缓冲和内存画图之后,不闪屏了,也没矩形了,但是没有矩形框变化大小的那个过程,只能最后闪烁一次啊
这个是正解,又简单,效果又好,MSDN里还有源码例子
例程下载: http://download.csdn.net/download/wxhxj0268/5074690