参考:https://blog.csdn.net/thanklife/article/details/80305285
该方法是在指定位置加载位图
BOOL CbitmapDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2); //从资源中加载图片
BITMAP bmp;
bitmap.GetBitmap(&bmp); //获取图片大小信息
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(bitmap);
CRect rect;
GetClientRect(&rect);
//pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
return TRUE;
}
对话框OnPaint函数绘制
//CBitmap bmp_bkg;
//bmp_bkg.LoadBitmap(IDB_BITMAP1); //载入背景图片
void CMyMusicPlayerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this); // 用于绘制的设备上下文
//绘制背景图片
BITMAP bmp;
bmp_bkg.GetBitmap(&bmp); //获取图片大小信息
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(&dc);
dcCompatible.SelectObject(bmp_bkg);
CRect rect;
GetClientRect(&rect); //735 472
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
CBrush mybrush;
mybrush.CreateSolidBrush(RGB(177,161,148));
CRect myrect(0, 390, 735, 472);
dc.FillRect(myrect, &mybrush); //底部灰色控制栏
CDialogEx::OnPaint();
}
}
添加一个静态文本控件/按钮,设置BITMAP属性,再SetBitmap
//CBitmap restart;
BOOL CMFC_DrawView::PreCreateWindow(CREATESTRUCT& cs)
{
restart.LoadBitmap((LPCTSTR)IDB_BITMAP1) //从资源中加载图片
return CView::PreCreateWindow(cs);
}
int CMFC_DrawView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
CButton* pButton=new CButton;
pButton->Create(L"restart",WS_CHILD|WS_VISIBLE|BS_BITMAP,CRect(365, 20, 425, 80),this,ID_RESTART_BUTTON);
//pButton->ModifyStyle(0,BS_BITMAP); //设置BS_BITMAP属性
pButton->SetBitmap((HBITMAP)restart); //设置控件bmp图片
SetTimer(MY_TIMEER, 1000, NULL);
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
1、加载图标
LoadIcon函数要加载位图,要使用CWinApp的成员函数LoadIcon才行。当你查看MSDN的时候,会发现,LoadIcon可以是CWinApp的Class member函数,也可以是windows api函数。说实话,windows api函数我不知道怎么使用,呵呵,大家可以自己去验证下能不能加载。这里既然说了是CWinApp函数,我们的MFC程序都有一个全局的变量,theApp。这个变量就是CWinApp类的对象,只需要使用theApp.LoadIcon()就可以了。当然,也可以使用AfxGetApp()获得CWinApp指针,比如AfxGetApp()->LoadIcon();
函数原型:
CWinApp::LoadIcon
HICON LoadIcon( LPCTSTR lpszResourceName ) const; //这一种是从硬盘上加载ICON,传入的参数是文件路径,比如“F:\\123.ico”;
HICON LoadIcon( UINT nIDResource ) const; //这种是从工程资源中加载ICON,传入参数是资源ID,比如IDC_ICON1.
简单举例:
(1)从硬盘加载
HICON hIcon = NULL;
hIcon = theApp.LoadIcon("F:\\123.ico");
或者
hIcon = AfxGetApp()->LoadIcon("F:\\123.ico");
(2)从资源加载
HICON hIcon = NULL;
hIcon = AfxGetApp()->LoadIcon(IDC_ICON1);
是不是很简单,这样就完成了图标的加载了。
2、位图的加载(从资源中加载)
位图的加载也很简单,我们使用CBItmap的成员函数LoadBitMap();
函数声明:
CBitmap::LoadBitmap
BOOL LoadBitmap( LPCTSTR lpszResourceName ); //从硬盘加载位图
BOOL LoadBitmap( UINT nIDResource ); //从资源加载位图
举例:
CBitmap bitmap;
bitmap.LoadBitmap("F:\\a.bmp");
或者
bitmap.LoadBitmap(IDB_BITMA1);
3、通用加载图片方式(从文件中加载)
这种方式,使用LoadImage来加载,这种方式可以去试试。
举例:
HBITMP hBitmap=(HBITMAP)::LoadImage(NULL,pszFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//
pszFileName
是文件路径。 LR_LOADFROMFILE表示从文件中加载。
或者
HICON hIcon = (HICON)::LoadImage(NULL,pszFileName,IMAGE_ICON,0,0,LP_LOADFROMFILE);