头文件
CPng2Rgb32Dib *m_pLoginbkPng;
源文件
构造:m_pLoginbkPng = NULL;
析构:
if (m_pLoginbkPng!=NULL)
{
delete m_pLoginbkPng;
m_pLoginbkPng=NULL;
}
//自定义函数
void CMyMsgBox::InitResources()
{
if (m_pLoginbkPng == NULL)
{
m_pLoginbkPng = new CPng2Rgb32Dib;
}
CString szExeDir = GetExeDir().c_str();
BOOL bLoad = m_pLoginbkPng->LoadPng(CString(szExeDir + _TEXT("\\res\\msgback.png")));
if (!bLoad)
return;
m_pLoginbkPng->PreMultiplyRGBChannels();
CRect rect;
memset(&rect, 0, sizeof(CRect));
rect.bottom = m_pLoginbkPng->GetHeight();
rect.right = m_pLoginbkPng->GetWidth();
//GetClientRect(rect);
HDC ParentHdc = CreateCompatibleDC(NULL);
HBITMAP BmpParent = CreateCompatibleBitmap(GetDC()->GetSafeHdc(), rect.Width(), rect.Height());
HGDIOBJ OldBmpP = SelectObject(ParentHdc, BmpParent);
m_pLoginbkPng->Draw(ParentHdc, 0, 0, rect.Width(), rect.Height(), 0, 0, rect.Width(), rect.Height(),255);
ButtonLoadImage(&ParentHdc);
if (BmpParent)
{
DeleteObject(BmpParent);
BmpParent = NULL;
}
if (ParentHdc)
{
SelectObject(ParentHdc, OldBmpP);
DeleteDC(ParentHdc);
ParentHdc = NULL;
OldBmpP = NULL;
}
}
重绘背景图片
void CMyMsgBox::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
if (m_pLoginbkPng)
{
if(m_pLoginbkPng->IsValid())
{
CRect rect;
GetClientRect(rect);
m_pLoginbkPng->Draw(dc.GetSafeHdc(), rect.left, rect.top, rect.Width(), rect.Height(),
0, 0, m_pLoginbkPng->GetWidth(), m_pLoginbkPng->GetHeight());
}
}
}