使用C++ mfc 在对话框上自由画多个框 并实现点击拖拽 放大缩小
要在MFC对话框上自由画多个框,并实现点击拖拽,放大缩小,可以按照以下步骤进行:
-
在对话框的资源编辑器中,添加一个自定义控件(例如一个静态框控件),用于显示绘图区域。为该控件添加消息处理函数。
-
在对话框的头文件中,声明一个用于存储绘图区域的矩形变量和一个用于存储鼠标拖拽状态的变量:
CRect m_drawRect; // 绘图区域矩形
bool m_isDragging; // 鼠标拖拽状态
- 在对话框的源文件中,添加以下消息处理函数:
- OnInitDialog:在对话框初始化时,初始化绘图区域矩形和鼠标拖拽状态。
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 初始化绘图区域矩形
CRect clientRect;
GetClientRect(&clientRect);
m_drawRect = clientRect;
// 初始化鼠标拖拽状态
m_isDragging = false;
return TRUE;
}
- OnPaint:在绘制对话框的绘图区域时,绘制框。
void CMyDialog::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
// 绘制绘图区域
dc.Rectangle(m_drawRect);
}
- OnLButtonDown:当鼠标左键按下时,记录鼠标位置,并将鼠标拖拽状态设置为true。
void CMyDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
// 记录鼠标按下的位置
m_startDragPos = point;
// 设置鼠标拖拽状态为true
m_isDragging = true;
CDialogEx::OnLButtonDown(nFlags, point);
}
- OnMouseMove:当鼠标移动时,根据鼠标拖拽状态来拖动绘图区域。
void CMyDialog::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_isDragging)
{
// 计算鼠标移动的距离
int dx = point.x - m_startDragPos.x;
int dy = point.y - m_startDragPos.y;
// 根据鼠标移动的距离来调整绘图区域
m_drawRect.OffsetRect(dx, dy);
// 重新绘制对话框
RedrawWindow();
}
CDialogEx::OnMouseMove(nFlags, point);
}
- OnLButtonUp:当鼠标左键释放时,将鼠标拖拽状态设置为false。
void CMyDialog::OnLButtonUp(UINT nFlags, CPoint point)
{
m_isDragging = false;
CDialogEx::OnLButtonUp(nFlags, point);
}
-
在对话框的资源编辑器中,添加放大和缩小的按钮,并为这些按钮添加点击事件的消息处理函数。
-
在点击放大和缩小按钮的消息处理函数中,根据需要调整绘图区域的大小,并重新绘制对话框。
这样,你就可以在MFC对话框上自由画多个框,并实现点击拖拽和放大缩小的功能了
原文地址: https://www.cveoy.top/t/topic/hBEQ 著作权归作者所有。请勿转载和采集!