学习界面编程使用自绘方式,对于PNG按钮在鼠标经过时的变化如何避免
学习界面编程使用自绘方式,对于PNG按钮在鼠标经过时的变化如何处理?
我百度到了PNG图片的加载方法,如下
加载的PNG图标按钮在鼠标经过时变成四周有边框的那种效果是如何实现的。希望大侠指条明路。让小弟少走弯路啊。没有使用GDI+。
------解决方案--------------------
1.画边框
2.先贴一张带边框的透明图,再贴按钮图
------解决方案--------------------
通过事件,加载相应图片,或者重写button控件进行控制(重绘)
------解决方案--------------------
是
如果你已经有带边框的图,就直接贴也行
------解决方案--------------------
贴图的代码写在按钮的派生类里面,不要写在对话框里
根据按钮是否禁用、是否按下、是否得到焦点的状态,分别用双缓冲贴不同的图就行了。
你网上随便找个自绘按钮类,应该都是这样处理的
我百度到了PNG图片的加载方法,如下
BOOL CCaptionRightPanel::LoadImageFromResource(CImage *pImage, UINT nResID,LPCTSTR lpTyp)
{
if ( pImage == NULL)
return false;
pImage->Destroy();
// 查找资源
HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
if (hRsrc == NULL)
return false;
// 加载资源
HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
if (hImgData == NULL)
{
::FreeResource(hImgData);
return false;
}
// 锁定内存中的指定资源
LPVOID lpVoid = ::LockResource(hImgData);
LPSTREAM pStream = NULL;
DWORD dwSize = ::SizeofResource(AfxGetResourceHandle(), hRsrc);
HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize);
LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew);
::memcpy(lpByte, lpVoid, dwSize);
// 解除内存中的指定资源
::GlobalUnlock(hNew);
// 从指定内存创建流对象
HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);
if ( ht != S_OK )
{
GlobalFree(hNew);
}
else
{
// 加载图片
pImage->Load(pStream);
GlobalFree(hNew);
}
// 释放资源
::FreeResource(hImgData);
return true;
}
加载的PNG图标按钮在鼠标经过时变成四周有边框的那种效果是如何实现的。希望大侠指条明路。让小弟少走弯路啊。没有使用GDI+。
------解决方案--------------------
1.画边框
2.先贴一张带边框的透明图,再贴按钮图
------解决方案--------------------
通过事件,加载相应图片,或者重写button控件进行控制(重绘)
------解决方案--------------------
是
如果你已经有带边框的图,就直接贴也行
------解决方案--------------------
贴图的代码写在按钮的派生类里面,不要写在对话框里
根据按钮是否禁用、是否按下、是否得到焦点的状态,分别用双缓冲贴不同的图就行了。
你网上随便找个自绘按钮类,应该都是这样处理的