在mfc里面,选择图片,然后针对图片在picture control里面,通过鼠标拖出矩形,然后将矩形的4个参数自动记录下来
时间: 2023-05-28 11:05:53 浏览: 182
,可以按照以下步骤进行:
1. 在资源视图中添加一个Picture Control控件,设置控件的ID为IDC_PICTURE。
2. 在CMainFrame类中添加一个成员变量CRect m_imageRect,用于记录矩形的参数。
3. 在CMainFrame类的OnCreate()函数中,添加如下代码:
```c++
// 获取Picture Control控件指针
CWnd* pWnd = GetDlgItem(IDC_PICTURE);
if (pWnd)
{
// 注册鼠标事件
pWnd->ModifyStyle(0, SS_NOTIFY);
pWnd->SetWindowLongPtr(GWL_STYLE, GetWindowLongPtr(GWL_STYLE) | WS_BORDER);
// 加载图片
CImage image;
image.Load(_T("your_image_path"));
// 将图片绘制到Picture Control控件中
CRect rect;
pWnd->GetClientRect(&rect);
CDC* pDC = pWnd->GetDC();
image.Draw(pDC->GetSafeHdc(), rect);
pWnd->ReleaseDC(pDC);
}
```
4. 在CMainFrame类中添加以下消息处理函数:
```c++
// 鼠标左键按下事件
void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)
{
// 获取Picture Control控件指针
CWnd* pWnd = GetDlgItem(IDC_PICTURE);
if (pWnd)
{
// 获取Picture Control控件的客户区矩形
CRect rect;
pWnd->GetClientRect(&rect);
// 计算图片的实际大小
CImage image;
image.Load(_T("your_image_path"));
int width = image.GetWidth();
int height = image.GetHeight();
// 计算图片在Picture Control控件中的显示区域
int x = (rect.Width() - width) / 2;
int y = (rect.Height() - height) / 2;
CRect imageRect(x, y, x + width, y + height);
// 判断鼠标点击位置是否在图片区域内
if (imageRect.PtInRect(point))
{
// 记录矩形的左上角坐标
m_imageRect.left = point.x;
m_imageRect.top = point.y;
// 鼠标捕捉
pWnd->SetCapture();
}
}
}
// 鼠标左键释放事件
void CMainFrame::OnLButtonUp(UINT nFlags, CPoint point)
{
// 获取Picture Control控件指针
CWnd* pWnd = GetDlgItem(IDC_PICTURE);
if (pWnd)
{
// 释放鼠标捕捉
pWnd->ReleaseCapture();
// 记录矩形的右下角坐标
m_imageRect.right = point.x;
m_imageRect.bottom = point.y;
// 更新Picture Control控件的显示区域
pWnd->Invalidate();
}
}
// 鼠标移动事件
void CMainFrame::OnMouseMove(UINT nFlags, CPoint point)
{
// 获取Picture Control控件指针
CWnd* pWnd = GetDlgItem(IDC_PICTURE);
if (pWnd && pWnd->GetCapture() == pWnd)
{
// 记录矩形的右下角坐标
m_imageRect.right = point.x;
m_imageRect.bottom = point.y;
// 更新Picture Control控件的显示区域
pWnd->Invalidate();
}
}
```
5. 在CMainFrame类的OnPaint()函数中,添加如下代码:
```c++
void CMainFrame::OnPaint()
{
CPaintDC dc(this);
// 获取Picture Control控件指针
CWnd* pWnd = GetDlgItem(IDC_PICTURE);
if (pWnd)
{
// 绘制图片
CImage image;
image.Load(_T("your_image_path"));
CRect rect;
pWnd->GetClientRect(&rect);
CDC* pDC = pWnd->GetDC();
image.Draw(pDC->GetSafeHdc(), rect);
pWnd->ReleaseDC(pDC);
// 绘制矩形
CPen pen(PS_SOLID, 2, RGB(255, 0, 0));
CPen* pOldPen = dc.SelectObject(&pen);
CBrush* pOldBrush = (CBrush*)dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(m_imageRect);
dc.SelectObject(pOldPen);
dc.SelectObject(pOldBrush);
}
}
```
这样,当用户在Picture Control控件中拖出矩形后,矩形的参数就会自动记录在m_imageRect变量中。
阅读全文