mfc进行基本图形的绘制
时间: 2024-06-08 17:12:01 浏览: 110
基于MFC的简单图形绘制系统
5星 · 资源好评率100%
在MFC中进行基本图形的绘制可以使用CDC类。下面是一个简单的示例:
1. 创建一个MFC应用程序项目,选择对话框作为应用程序类型。
2. 打开对话框资源编辑器,添加一个静态文本控件和一个按钮控件。
3. 右击按钮控件,选择“添加事件处理程序”,在“添加事件处理程序”对话框中选择“BN_CLICKED”消息,并单击“确定”。
4. 在对话框类的头文件中添加以下代码:
```
class CMyDialog : public CDialogEx
{
public:
CMyDialog(CWnd* pParent = nullptr);
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MYAPP_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
afx_msg void OnPaint();
afx_msg void OnBnClickedButtonDraw();
DECLARE_MESSAGE_MAP()
private:
BOOL m_bDraw;
CPoint m_ptStart;
CPoint m_ptEnd;
};
```
5. 在对话框类的源文件中添加以下代码:
```
CMyDialog::CMyDialog(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MYAPP_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_bDraw = FALSE;
}
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_BUTTON_DRAW, &CMyDialog::OnBnClickedButtonDraw)
END_MESSAGE_MAP()
void CMyDialog::OnPaint()
{
CPaintDC dc(this);
if (m_bDraw)
{
CBrush brush(RGB(255, 0, 0)); // 创建一个红色的刷子对象
CPen pen(PS_SOLID, 2, RGB(0, 0, 255)); // 创建一个蓝色的画笔对象
CBrush* pOldBrush = dc.SelectObject(&brush); // 选择刷子对象
CPen* pOldPen = dc.SelectObject(&pen); // 选择画笔对象
dc.Rectangle(m_ptStart.x, m_ptStart.y, m_ptEnd.x, m_ptEnd.y); // 绘制矩形
dc.SelectObject(pOldBrush); // 恢复旧的刷子
dc.SelectObject(pOldPen); // 恢复旧的画笔
}
}
void CMyDialog::OnBnClickedButtonDraw()
{
m_bDraw = TRUE;
UpdateData(FALSE);
Invalidate();
}
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。对于应用程序,设置小图标
// 用于 MDI 样式的子窗口,则设置此对话框的小图标
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
```
6. 这个示例程序中,点击“绘制”按钮后会绘制一个矩形。在OnBnClickedButtonDraw()函数中设置m_bDraw为TRUE,然后调用UpdateData()和Invalidate()函数,最后在OnPaint()函数中绘制矩形。
7. 编译并运行程序,点击“绘制”按钮,就可以看到绘制的矩形了。
阅读全文