创建一个MFC的对话框程序,对话框上有四个Button按钮,按钮上要贴PNG图片,按钮大小自适应PNG图片大小。当单击Button1后,PNG图片切换成另一张PNG图片。 然后当我单击Button2后,PNG图片切换成另一张PNG图片,此时Button1按钮自动切换成初始化的PNG图片。。 (要实现的是:鼠标单击后,不是鼠标放上,按下。鼠标放上,按下的效果暂不实现。如果实现了,那更好。) 当我单击Button3后,切换另一张PNG图片,其他的按钮自动切换到初始化PNG图片 其他按钮同理望,CSDN中的高手们给予解决,鼠标单击后的效果。。谢谢啊!在网上看了些,都是用GDI+ 实现。 可是没有比较完整的代码实例。。望,CSDN中的高手们给予解决,感谢啊! 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();
}
望高手们帮忙看看。
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://download.csdn.net/detail/mhwer99/3719771
public:
void OnLoadPng(void);
public:
CButton m_ButtonOne; //先关联一个Button1按钮。
.cpp 文件:
void CTestButtonPngDlg::OnLoadPng()
{
Graphics graphics(m_ButtonOne.GetWindowDC()->m_hDC);
Image image(L"imgaresed\\11.png", TRUE); //图片的路径,我把imgaresed文件夹图片放在res中
graphics.DrawImage(&image,0,0);}我调试,运行都对。 结果没有反应。 在OnInitDialog()中调用不行,OnPaint()也不行。这个函数怎么调用。
但要想实现透明效果会比较麻烦
一 、在stdafx.h文件中添加头文件,命名空间,库的引用,
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment( lib, "gdiplus.lib" )
二、在程序实现文件中添加全局变量
ULONG_PTR gdiplusToken;
三、在应用程序初始化时进行GDI+的初始化
BOOL CXXXApp::InitInstance()
{
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
//省略其他代码
return FALSE;
}
四、重写ExitInstance函数
int CXXXApp::ExitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
GdiplusShutdown(gdiplusToken);
return CWinApp::ExitInstance();
}
五、添加两个按钮为按钮1添加控件变量
CButton m_Button_ctlTest;
添加函数OnLoadPng()
void CXXXDlg::OnLoadPng()
{
Graphics graphics(m_Button_ctlTest.GetWindowDC()->m_hDC);
Image image(L"picture\\test.png", TRUE);
//picture\\test.png是png文件的路径
graphics.DrawImage(&image,0,0);
}
在按钮2中调用OnLoadPng()函数。
点击按钮2的时候,就会看到按钮1载入了png图片。 按照上面的方法编译运行是对的,可是没有效果。
我这有个自己通过自绘按钮方式实现类似于360界面按钮的按钮...看是否符合你的要求...我里面用的是位图,把位图改成PNG图片就可以了...
小弟刚出,在公司实习,每天做练习跟项目相关的。
创建一个MFC的对话框程序,对话框上有四个Button按钮,按钮上要贴PNG图片,按钮大小自适应PNG图片大小。当单击Button1后,PNG图片切换成另一张PNG图片。 然后当我单击Button2后,PNG图片切换成另一张PNG图片,此时Button1按钮自动切换成初始化的PNG图片。。 (要实现的是:鼠标单击后,不是鼠标放上,按下。鼠标放上,按下的效果暂不实现。如果实现了,那更好。) 当我单击Button3后,切换另一张PNG图片,其他的按钮自动切换到初始化PNG图片 其他按钮同理
http://download.csdn.net/detail/allen_lanyuhai/3658158
public:
CBitmapButton m_btnOne;
CBitmapButton m_btnTwo;
......BOOL CDialogTrain::OnInitDialog()
{
//初始化BMP按钮图片
m_btnOne.LoadBitmaps(IDB_BITMAP4);
m_btnOne.SubclassDlgItem(IDC_BUTTON_TR_ONE,this);
m_btnOne.SizeToContent(); //-------------------------------
m_btnTwo.LoadBitmaps(IDB_BITMAP37);
m_btnTwo.SubclassDlgItem(IDC_BUTTON_TR_TWO,this);
m_btnTwo.SizeToContent(); return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}我现在要导入PNG图片:
BOOL CTestBtnPngDlg::OnInitDialog()
{
//初始化PNG图片按钮-----------------------------
m_ButtonOne.LoadBitmaps(IDB_PNG1);
m_ButtonOne.SubclassDlgItem(IDC_BUTTON_ONE,this);
m_ButtonOne.SizeToContent();
//------------------------------
m_ButtonTwo.LoadBitmaps(IDB_PNG2);
m_ButtonTwo.SubclassDlgItem(IDC_BUTTON_TWO,this);
m_ButtonTwo.SizeToContent(); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}导入PNG图片运行的时候就崩了。 PNG图片不能直接像BMP那样用吗?
帮忙看看!
CBitmap bitmap;
image.Load(_T("res//imgaresed//11.png"));
HBITMAP hbmp = image.Detach();
bitmap.Attach(hbmp);动态加载PNG图片到按钮上。 上面的代码我放到初始化,OnPaint(); 怎么都不行啊。编译运行都没错,就是没显示PNG图片。。
望,高手们帮忙看看。 怎么把这段代码跟Button关联,显示到按钮上
要想动态加载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);
你自己去下吧