(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”啊,自己手写的话不划算,有很多现成的控件类,都写的非常好,完全可以拿来为我们所用。
图片控件的是响应的通知消息,没有像按钮那样的边框变化,你可以用CBitmapButton类,你可以在对话框上添加一个button控件按钮,让后在代码声明的部分把CButton改成CbitMapButton,然后再初始化的时候调用Setbitmap就可以做出你要的效果了。你可以使用MFC的CImage类,该类的头文件是atlimage.h
下面是示例代码:
CDC *pDC = GetDC()CImage Image
Image.Load(strPath)
if (Image.IsNull())
{
MessageBox(_T("没加载成功"))
return -1
}
if (Image.GetBPP() == 32) //确认该图像包含Alpha通道
{
int i
int j
for (i = 0 i < Image.GetWidth() i++)
{
for (j = 0 j < Image.GetHeight() j++)
{
byte *pByte = (byte *)Image.GetPixelAddress(i, j)
pByte[0] = pByte[0] * pByte[3] / 255
pByte[1] = pByte[1] * pByte[3] / 255
pByte[2] = pByte[2] * pByte[3] / 255
}
}
}
Image.Draw(pDC->m_hDC, 0, 0)
Image.Destroy()
ReleaseDC(pDC)
注意使用CImage,对于带alpha通道数据的图片要特别处理一下,上面的示例中,双循环体就是做的这个事情,你可以参考。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)