21xrx.com
2024-11-05 19:27:04 Tuesday
登录
文章检索 我的文章 写文章
如何在Visual C++ 6.0中绘制一个爱心?
2023-07-11 01:52:37 深夜i     --     --
Visual C++ 爱心 绘制

在 Visual C++ 6.0 中绘制一个爱心可以通过GDI+实现。以下是步骤和代码示例。

步骤:

1. 创建一个MFC应用程序

2. 打开应用程序的“资源视图”以编辑“mainframe.rc”文件

3. 在“mainframe.ico”下面添加以下代码:

IDB_HEART BITMAP "heart.bmp"

4. 这里用到一个图片资源“heart.bmp”,可以在网上下载,并放置于工程目录下。

5. 打开“mainfrm.cpp”,在CMainFrame类的OnCreate()函数中添加以下代码:

CBitmap bitmap;

bitmap.LoadBitmap(IDB_HEART);

BITMAP bmpInfo;

bitmap.GetBitmap(&bmpInfo);

m_brush = new CBrush();

m_brush->CreatePatternBrush(&bitmap);

SetClassLong(m_hWnd, GCL_HBRBACKGROUND, (LONG)m_brush->GetSafeHandle());

6. 这段代码为窗口设置背景颜色,其中用到了背景图案,并创建了一种画刷(brush)。

7. 最后,在窗口的OnPaint()函数中添加以下代码:

CPaintDC dc(this);

Graphics graphics(dc.m_hDC);

Pen pen(Color(192,0,0), 10);

SolidBrush brush(Color(255, 192, 203));

graphics.DrawBezier(&pen, 20, 200, 70, 100, 100, 100, 150, 200);

graphics.DrawBezier(&pen, 150, 200, 200, 100, 230, 100, 270, 200);

graphics.FillEllipse(&brush, 55, 110, 120, 120);

8. 这里代码的解释:我们使用Graphics类创建图形对象,并使用Pen类和SolidBrush类分别设置线条和填充的颜色。 DrawBezier()方法绘制贝塞尔曲线。 FillEllipse()方法绘制传统的圆形,我们做了一些调整,使其形成一个爱心的形状。

代码示例:

// mainframe.rc

IDB_HEART BITMAP "heart.bmp"

// mainfrm.cpp

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)

{

  m_wndSplitter.CreateStatic(this, 1, 2);

  CRect rect;

  m_wndSplitter.GetClientRect(&rect);

  m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CHelloView), CSize(rect.Width() / 2, rect.Height()), pContext);

  m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CWorldView), CSize(rect.Width() / 2, rect.Height()), pContext);

  return TRUE;

}

void CMainFrame::OnPaint()

{

  CPaintDC dc(this);

  Graphics graphics(dc.m_hDC);

  Pen pen(Color(192,0,0), 10);

  SolidBrush brush(Color(255, 192, 203));

  graphics.DrawBezier(&pen, 20, 200, 70, 100, 100, 100, 150, 200);

  graphics.DrawBezier(&pen, 150, 200, 200, 100, 230, 100, 270, 200);

  graphics.FillEllipse(&brush, 55, 110, 120, 120);

}

// mainfrm.h

class CMainFrame : public CFrameWnd

{

public:

  CMainFrame();

protected:

  DECLARE_DYNAMIC(CMainFrame)

  CBrush* m_brush;

  afx_msg void OnPaint();

  afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

  DECLARE_MESSAGE_MAP()

};

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复