mfc中把很多的图片合成到一组是怎么做的,就像下面这样这样

mfc中把很多的图片合成到一组是怎么做的,就像下面这样这样,第1张

楼主先用组框 把这些属性图标范围框起来 然后里面放入这些图标就行;

具体步骤是:在资源属性列表中 添加资源-》然后倒入位图(bitmap),得提前把位图资源*.bmp文件放在名为res的文件夹里 (一定记住必须得保证这些图片原始尺寸一,且符合组框大小,不然没法缩小的)。慢慢琢磨琢磨,祝你成功!

添加背景最好是放在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”啊,自己手写的话不划算,有很多现成的控件类,都写的非常好,完全可以拿来为我们所用。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/bake/11305550.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存