在开发版上用C语言写实心圆,MFC利用CPen与CBrush绘制实心圆

实现代码如下

void CMyPaintView::MDrawRedArc(CPoint point, int mSize)

{

CPoint tmppoint;

tmppoint.x=point.x-mSize;

tmppoint.y=point.y-m_Size;

CPen pNewPen;

CPen *pOldPen;

pNewPen.CreatePen(PS_SOLID,1,RGB(255,0,0));

pOldPen = pDLMemDC.SelectObject(&pNewPen);

//定义画刷填充圆

CBrush fillbrush;

CBrush *oldbrush;

fillbrush.CreateSolidBrush(RGB(255,0,0));

oldbrush=pDLMemDC.SelectObject(&fillbrush);

pDLMemDC.Ellipse(tmppoint.x,tmppoint.y,tmppoint.x+mSize,tmppoint.y+mSize);

pDLMemDC.SelectObject(oldbrush);

pDLMemDC.SelectObject(pOldPen);

fillbrush.DeleteObject();

pNewPen.DeleteObject();

} point为实心圆圆心所在的位置,mSize为圆的半径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 MFC 界面上画一个透明,可以按照以下步骤进行: 1. 创建一个 MFC 对话框程序,打开资源视图,添加一个 Picture Control 控件,设置其 ID 为 IDC_CANVAS。 2. 在对话框类的头文件中添加以下代码: ``` CBitmap m_bmpCanvas; // 画布位图 CRect m_rectCanvas; // 画布矩形 CDC* m_pDCMem; // 内存设备上下文 CBrush m_brushTransparent; // 透明画刷 ``` 3. 在 OnInitDialog 函数中添加以下代码: ``` // 获取画布控件指针 CWnd* pWndCanvas = GetDlgItem(IDC_CANVAS); // 获取画布矩形 pWndCanvas->GetClientRect(m_rectCanvas); // 创建画布位图 m_bmpCanvas.CreateCompatibleBitmap(this->GetDC(), m_rectCanvas.Width(), m_rectCanvas.Height()); // 创建内存设备上下文 m_pDCMem = new CDC(); m_pDCMem->CreateCompatibleDC(this->GetDC()); m_pDCMem->SelectObject(&m_bmpCanvas); // 创建透明画刷 m_brushTransparent.CreateStockObject(NULL_BRUSH); // 绘制透明背景 m_pDCMem->FillRect(m_rectCanvas, &m_brushTransparent); ``` 4. 在 OnPaint 函数中添加以下代码: ``` CPen penBlack(PS_SOLID, 1, RGB(0, 0, 0)); // 创建黑色实线画笔 m_pDCMem->SelectObject(&penBlack); // 选择画笔 m_pDCMem->SelectObject(&m_brushTransparent); // 选择透明画刷 m_pDCMem->Ellipse(m_rectCanvas); // 绘制透明 ``` 5. 在 OnEraseBkgnd 函数中添加以下代码: ``` return TRUE; // 返回 TRUE 表示背景已被擦除 ``` 这样,就可以在 MFC 界面上画一个透明了。需要注意的是,在绘制完透明后,需要调用 Invalidate 函数来触发界面的重绘。完整代码如下: ``` // MyDlg.h #pragma once #include "afxwin.h" class CMyDlg : public CDialogEx { public: CMyDlg(CWnd* pParent = nullptr); #ifdef AFX_DESIGN_TIME enum { IDD = IDD_MY_DIALOG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); DECLARE_MESSAGE_MAP() afx_msg void OnPaint(); afx_msg BOOL OnEraseBkgnd(CDC* pDC); virtual BOOL OnInitDialog(); private: CBitmap m_bmpCanvas; // 画布位图 CRect m_rectCanvas; // 画布矩形 CDC* m_pDCMem; // 内存设备上下文 CBrush m_brushTransparent; // 透明画刷 }; // MyDlg.cpp #include "MyDlg.h" #include "afxdialogex.h" CMyDlg::CMyDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_MY_DIALOG, pParent) { } void CMyDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx) ON_WM_PAINT() ON_WM_ERASEBKGND() END_MESSAGE_MAP() BOOL CMyDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 获取画布控件指针 CWnd* pWndCanvas = GetDlgItem(IDC_CANVAS); // 获取画布矩形 pWndCanvas->GetClientRect(m_rectCanvas); // 创建画布位图 m_bmpCanvas.CreateCompatibleBitmap(this->GetDC(), m_rectCanvas.Width(), m_rectCanvas.Height()); // 创建内存设备上下文 m_pDCMem = new CDC(); m_pDCMem->CreateCompatibleDC(this->GetDC()); m_pDCMem->SelectObject(&m_bmpCanvas); // 创建透明画刷 m_brushTransparent.CreateStockObject(NULL_BRUSH); // 绘制透明背景 m_pDCMem->FillRect(m_rectCanvas, &m_brushTransparent); return TRUE; } void CMyDlg::OnPaint() { CPaintDC dc(this); // 绘制画布位图 dc.BitBlt(m_rectCanvas.left, m_rectCanvas.top, m_rectCanvas.Width(), m_rectCanvas.Height(), m_pDCMem, 0, 0, SRCCOPY); } BOOL CMyDlg::OnEraseBkgnd(CDC* pDC) { return TRUE; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值