MFC 基于对话框的程序,实现按钮PNG图片。该如何处理

MFC 基于对话框的程序,实现按钮PNG图片。
创建一个MFC的对话框程序,对话框上有四个Button按钮,按钮上要贴PNG图片,按钮大小自适应PNG图片大小。当单击Button1后,PNG图片切换成另一张PNG图片。 然后当我单击Button2后,PNG图片切换成另一张PNG图片,此时Button1按钮自动切换成初始化的PNG图片。。 (要实现的是:鼠标单击后,不是鼠标放上,按下。鼠标放上,按下的效果暂不实现。如果实现了,那更好。) 当我单击Button3后,切换另一张PNG图片,其他的按钮自动切换到初始化PNG图片。。。 其他按钮同理。。。

望,****中的高手们给予解决,鼠标单击后的效果。。谢谢啊!

在网上看了些,都是用GDI+ 实现。 可是没有比较完整的代码实例。。

望,****中的高手们给予解决,感谢啊! GDI+的初始化我都实现了。。。

stdafx.h:

#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment( lib, "gdiplus.lib" )


TestButtonPng.h:

protected:
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR gdiplusToken;

public:
virtual int ExitInstance();


TestButtonPng.cpp:
BOOL CTestButtonPngApp::InitInstance()
{
  GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);

INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);

CWinApp::InitInstance();

AfxEnableControlContainer();
}

int CTestButtonPngApp::ExitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
GdiplusShutdown(gdiplusToken);

return CWinApp::ExitInstance();
}


。。。。。。望高手们帮忙看看。

------解决方案--------------------
http://blog.sina.com.cn/s/blog_56fd66a70100hxib.html

这个不错。
------解决方案--------------------
用我的吧
http://download.****.net/detail/mhwer99/3719771
------解决方案--------------------
我给你发一个高级界面,里面都有的,还有其他一些界面方面的东西,你也看看!
------解决方案--------------------
高级界面里面,有一种button已经实现了,你只要传入不同的图片即可!
------解决方案--------------------
源码给你了!
------解决方案--------------------
这个按钮接近你的要求...只要把BMP图片改成PNG图片就行了...
http://download.****.net/detail/allen_lanyuhai/3658158
------解决方案--------------------
还没搞定么?是我的代码吗?
要想动态加载png只要改一下这个函数就可以了
BOOL CMyButton::LoadStpImage(LPCWSTR normal, LPCTSTR mask, LPCTSTR pType)
{
m_pStdImage = new CGdiPlusBitmapResource;

bool ret = m_pStdImage->LoadFromFile(normal);//, pType);

m_bMask.DeleteObject();

if(mask != "")
{
HBITMAP hBitmap= (HBITMAP)::LoadImage(NULL,mask,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
if (hBitmap == NULL)
{
return FALSE;
}

m_bMask.Attach(hBitmap);
if (hClipRgn) DeleteObject(hClipRgn);
hClipRgn = CreateRgnFromBitmap(m_bMask, RGB(255,255,255));
if (hClipRgn)
{
SetWindowRgn(hClipRgn, TRUE);
SelectClipRgn((HDC)GetDC(),hClipRgn);
SetWindowPos(NULL,0,0,GetBitmapWidth(m_bMask),GetBitmapHeight(m_bMask),SWP_NOZORDER|SWP_NOMOVE);//设置按钮大小
}

}
return ret;
}

调用的时候这样写
CString nomp;//png图片路径
CString headp;//bmp图片路径
...
LPCWSTR pChar = 0; 
USES_CONVERSION; 
pChar = A2CW((LPCSTR)nomp); 
m_MyButton->LoadStpImage(pChar, headp, _T("PNG"));
m_MyButton->ShowWindow(SW_SHOW);
------解决方案--------------------
http://download.****.net/detail/mhwer99/3719771
你自己去下吧