|
成员变量:
CRect m_rect; // 拖动的矩形
CPoint m_ptOrigin; // 矩形左上角
BOOL m_bDraw; // 是否绘制拖动的矩形
BOOL m_bFirstDraw; // 是否第一次绘制矩形
CBrush m_brush; // 填充拖放矩形的画刷
构造函数初始化:
m_bFirstDraw = TRUE;
m_bDraw = FALSE;
m_ptOrigin = CPoint(0, 0);
m_brush.CreateSolidBrush(RGB(255, 0, 0));
鼠标左键按下:
void DragRectTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_bFirstDraw = TRUE; // 第一次绘制矩形
m_bDraw = TRUE; // 开始绘制
m_ptOrigin = point; // 鼠标当前位置作为矩形左上角
CDialogEx::OnLButtonDown(nFlags, point);
}
鼠标左键抬起:
void DragRectTestDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_bDraw = FALSE; // 停止绘制
CClientDC dc(this);
CRect rect(0, 0, 0, 0);
// 结束填充区域
dc.DrawDragRect(rect, CSize(1, 1), m_rect, CSize(1, 1), NULL, NULL);
CDialogEx::OnLButtonUp(nFlags, point);
}
鼠标左键不松开且移动:
void DragRectTestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
if (m_bDraw == TRUE) // 开始绘制
{
CRect rect(m_ptOrigin, point); // 绘制的矩形
rect.NormalizeRect(); // 使矩形区域正常化
if (m_bFirstDraw == TRUE) // 第一次绘制
{
m_bFirstDraw = FALSE;
dc.DrawDragRect(rect, CSize(20, 20), NULL, CSize(20, 20),
&m_brush, &m_brush); // 绘制矩形
}
else
dc.DrawDragRect(rect, CSize(20, 20), m_rect, CSize(20, 20),
&m_brush, &m_brush); // 绘制拖动的矩形
m_rect.CopyRect(rect); // 保存当前矩形到m_rect
}
CDialogEx::OnMouseMove(nFlags, point);
}
|
-
重叠部分怎么是白色?怎么改
上一篇: 如何用系统托盘做一个进度条(一点击系统托盘,他就在上面显示进度条)下一篇: 关于MFC的应用前景?
|