1、新建MFC应用程序。
3、右击项目,选择添加-资源。
4、在添加资源对话框中,点击导入,选择要作为背景的图片。
5、在工具箱找到Picture控件,托到界面中。
6、在界面上点击选中Picture控件,然后在属性的Type下拉框中,选择Bitmap。
7、再在Picture控件的属性的Type下拉框中插入的图片资源,选择好后,图片就可以加载进对话框了。
8、运行程序,看到背景已经变成你设置的图片。
添加背景最好是放在OnEraseBkgnd(CDC* pDC)函数中,在OnPaint中有可能会闪屏。
// CBitmap m_pBmp// BITMAP bm
// CDC dcMem
// m_pBmp.LoadBitmap(IDB_BITMAP_BG)
// m_pBmp.GetBitmap(&bm)//得到位图尺寸
// dcMem.CreateCompatibleDC(pDC)
// CBitmap* pOldBitmap = dcMem.SelectObject(&m_pBmp)
// pDC->SetStretchBltMode(COLORONCOLOR)//这个模式不设置的话会导致图片严重失真
// pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0, bm.bmWidth,bm.bmHeight,SRCCOPY)
// dcMem.SelectObject(pOldBitmap)
// dcMem.DeleteDC()
用我这个代码
为什么要LoadBitmap 2次?
背景图像加载很简单,你只需要做以下几步即可(假设你的登陆界面对话框类名叫“CLoginDlg”):(1)菜单“Insert”->"Resource",选择Bitmap,然后点“Import...”,选择你的背景图像,然后假设该资源ID为“IDB_BITMAP1”;
(2)在LoginDlg.h下声明一个CBitmap m_BKbitmap;
(3)在LoginDlg.cpp的构造函数中:m_BKbitmap.LoadBitmap(IDB_BITMAP1);
(4)在LoginDlg.cpp的OnPaint()函数中写上:
void CLoginDlg::OnPaint()
{
CPaintDC dc(this)// device context for painting
if (IsIconic())
{
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0)
// Center icon in client rectangle
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
// Draw the icon
dc.DrawIcon(x, y, m_hIcon)
}
else
{
BITMAP bm
CRect rect
CDC dcMem
m_BKbitmap.GetBitmap (&bm)
GetClientRect(&rect)
dcMem.CreateCompatibleDC (&dc)
CBitmap *oldbitmap=dcMem.SelectObject (&m_BKbitmap)
dc.BitBlt (0,0,bm.bmWidth ,bm.bmHeight ,&dcMem,0,0,SRCCOPY)
dcMem.SelectObject(oldbitmap)
CDialog::OnPaint()
}
}
你的问题就OK了。
关于按钮控件显示图片,建议你可以下载一个CButton的继承类,什么“CButtonST”啊、“CBtnST”啊、“CDlgShadeButtonST”啊,自己手写的话不划算,有很多现成的控件类,都写的非常好,完全可以拿来为我们所用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)