MFC 读取 Res 中的 5 张 BMP 图片并绘制
以下是使用 MFC 读取 res 中的 5 张 bmp 图片,计算位图的宽度和高度,并将其画在指定坐标上的示例代码:
#include "stdafx.h"
#include "resource.h"
class CMyWinApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CMyFrameWnd : public CFrameWnd
{
public:
CMyFrameWnd();
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
private:
CBitmap m_bitmap[5];
};
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMyFrameWnd();
m_pMainWnd->ShowWindow(SW_NORMAL);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMyFrameWnd::CMyFrameWnd()
{
for (int i = 0; i < 5; i++)
{
m_bitmap[i].LoadBitmap(IDB_BITMAP1 + i);
}
}
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
void CMyFrameWnd::OnPaint()
{
CPaintDC dc(this);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
for (int i = 0; i < 5; i++)
{
BITMAP bmpInfo;
m_bitmap[i].GetBitmap(&bmpInfo);
int bitmapWidth = bmpInfo.bmWidth;
int bitmapHeight = bmpInfo.bmHeight;
memDC.SelectObject(&m_bitmap[i]);
dc.BitBlt(i * (bitmapWidth + 10), 10, bitmapWidth, bitmapHeight, &memDC, 0, 0, SRCCOPY);
}
}
CMyWinApp theApp;
上述代码中,CMyWinApp 类继承自 CWinApp,用于初始化应用程序。CMyFrameWnd 类继承自 CFrameWnd,用于创建主窗口,并且重载了 OnPaint 函数用于绘制位图。m_bitmap 数组存储了 5 张位图。
在 CMyFrameWnd 的构造函数中,使用 LoadBitmap 函数加载了 5 张位图,参数 IDB_BITMAP1 + i 表示资源 ID,需要根据实际的资源 ID 进行修改。
在 OnPaint 函数中,通过 GetBitmap 函数获取位图的宽度和高度,并使用 BitBlt 函数将位图绘制在指定的坐标上。i * (bitmapWidth + 10) 表示每张位图的横坐标,10 表示位图的纵坐标,bitmapWidth 和 bitmapHeight 分别为位图的宽度和高度。SRCCOPY 表示直接将位图复制到目标设备上。
以上示例代码可以在 MFC 应用程序的 InitInstance 函数中调用 CMyWinApp 类来运行。
原文地址: http://www.cveoy.top/t/topic/hsZq 著作权归作者所有。请勿转载和采集!