在MFC中使用Rectangle画矩形
时间: 2023-11-17 18:06:06 浏览: 679
在 MFC 中使用 `CRect` 类来创建一个矩形,然后使用 `CDC` 类中的 `Rectangle` 函数来画出这个矩形。下面是一个简单的示例代码:
```cpp
CRect rect(10, 10, 100, 100); // 创建一个左上角坐标为 (10, 10),右下角坐标为 (100, 100) 的矩形
CPaintDC dc(this); // 创建一个绘图设备上下文
dc.Rectangle(rect); // 用黑色画刷画出这个矩形
```
在这个示例代码中,`CRect` 类的构造函数接受四个参数,分别是左上角的 x 坐标、左上角的 y 坐标、右下角的 x 坐标和右下角的 y 坐标。`CPaintDC` 类是一个绘图设备上下文,用于在窗口或者控件上进行绘图。`Rectangle` 函数使用当前画刷和画笔来画出一个矩形。
相关问题
在MFC中使用Rectangle画矩形时怎么改变颜色
在 MFC 中,可以使用 `CDC` 类中的 `SelectObject` 函数来选择不同的画刷和画笔,从而改变矩形的颜色。具体步骤如下:
1. 创建一个画刷和一个画笔,用于绘制矩形。例如,可以创建一个红色画刷和一个蓝色画笔:
```cpp
CBrush brush(RGB(255, 0, 0)); // 创建红色画刷
CPen pen(PS_SOLID, 1, RGB(0, 0, 255)); // 创建蓝色画笔
```
2. 在绘图设备上下文中选择这个画刷和画笔:
```cpp
CRect rect(10, 10, 100, 100); // 创建一个矩形
CPaintDC dc(this); // 创建一个绘图设备上下文
dc.SelectObject(&brush); // 选择红色画刷
dc.SelectObject(&pen); // 选择蓝色画笔
dc.Rectangle(rect); // 用选定的画刷和画笔画出这个矩形
```
在这个示例代码中,`SelectObject` 函数可以接受一个指向画刷或画笔对象的指针,用于选择这个画刷或画笔。注意,在选择画刷和画笔之后,需要在画完矩形后,再恢复回原来的画刷和画笔,否则后续的绘图操作也会受到影响。可以使用 `SelectObject` 函数再次选择原来的画刷和画笔,或者使用 `DeleteObject` 函数删除新建的画刷和画笔。
mfc在图片上画矩形框
在MFC中,可以使用CRect类和CDC类的相关函数来在图片上画矩形框。
以下是一个简单的示例代码:
首先,我们需要为应用程序添加一个按钮和一个图片控件。在按钮的单击事件处理程序中,我们将使用CDC类的相关函数来在图片上画矩形框。
```
// 头文件包含
#include <afxwin.h>
#include <afxcmn.h>
#include <afxdlgs.h>
// 定义全局变量
CBitmap m_bitmap; // 图片
CRect m_rect; // 矩形框
// 按钮单击事件处理程序
void CMyDialog::OnBnClickedButtonDrawRect()
{
// 获取图片控件的CDC
CDC* pDC = m_picture.GetDC();
// 创建画笔
CPen pen(PS_SOLID, 2, RGB(255, 0, 0));
// 选择画笔
CPen* pOldPen = pDC->SelectObject(&pen);
// 画矩形框
pDC->Rectangle(m_rect);
// 恢复画笔
pDC->SelectObject(pOldPen);
// 释放CDC
m_picture.ReleaseDC(pDC);
}
// 图片控件绘制事件处理程序
void CMyDialog::OnPaint()
{
CPaintDC dc(this);
// 创建内存DC
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
// 选择图片
CBitmap* pOldBitmap = dcMem.SelectObject(&m_bitmap);
// 绘制图片
BITMAP bm;
m_bitmap.GetBitmap(&bm);
dc.StretchBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
// 恢复DC
dcMem.SelectObject(pOldBitmap);
}
// 图片控件大小改变事件处理程序
void CMyDialog::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
// 更新矩形框
m_rect = CRect(10, 10, cx - 10, cy - 10);
}
// 打开图片按钮单击事件处理程序
void CMyDialog::OnBnClickedButtonOpenImage()
{
// 打开文件对话框
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Image Files (*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png||"), this);
if (dlg.DoModal() == IDOK)
{
// 加载图片
m_bitmap.LoadImage(dlg.GetPathName());
// 更新图片控件
m_picture.Invalidate();
}
}
```
在上面的代码中,我们首先在OnSize事件处理程序中更新矩形框的大小,然后在打开图片按钮单击事件处理程序中加载图片并更新图片控件。
在按钮单击事件处理程序中,我们获取图片控件的CDC,并使用CPen类创建一个红色的画笔。然后选择画笔,使用CDC的Rectangle函数在图片上画矩形框。最后,我们恢复画笔并释放CDC。
在图片控件的绘制事件处理程序中,我们使用CDC的StretchBlt函数绘制图片。在这个示例中,我们将图片缩放到与图片控件的大小相同。
请注意,在实际应用中,您可能需要在矩形框上添加文本或其他图形元素。您可以使用CDC的相关函数来实现这些效果。
阅读全文