MFC透明BUTTON、EDIT、STATIC控件

来源:互联网 发布:手机语音通话软件 编辑:程序博客网 时间:2024/06/18 05:21

一、先做透明的EDIT、STATIC,查看参考资料一,下载里面的文件,然后把“EditTrans.h" ”EditTrans.cpp"导入工程,把项目中的需要透明的EDIT改一下就可以了,

类似CEditTrans m_result; //原CEdit m_result 改为CEditTrans m_result就可以透明了。其他用法请查看资料1.

   注:如果在vs2010创建项目的时候选择了公共控件清单,会造成edit背景变黑。需要注释掉stdafx.h里面的这段代码

[cpp] view plaincopyprint?
  1. //#ifdef _UNICODE  
  2. //#if defined _M_IX86  
  3. //#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")  
  4. //#elif defined _M_X64  
  5. //#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")  
  6. //#else  
  7. //#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")  
  8. //#endif  
  9. //#endif  

二、png类型的BUTTON,查看参考资料二。

1.添加对应的4个文件

  • GdipButton.h
  • GdipButton.cpp
  • MemDC.h
  • CGdiPlusBitmap.h

如果在VS2010下,因为CMemDC的关系,请对源码进行相应的修改。在CMmeDC.h增加命名空间,

[cpp] view plaincopyprint?
  1. namespace ns_gdiBtn  
  2. {  
  3.        class CMemDC : public CDC {  
  4.        ..............................  
  5.        };  
  6. };  
2.修改代码用到CMemDC的地方改为ns_gdiBtn::CMemDC.

3.添加对应的PNG资源,然后按钮做对应修改,CButton m_btnLogin 改为CGdipButton m_btnLogin;增加下面代码

[cpp] view plaincopyprint?
  1. m_btnLogin.LoadStdImage(IDB_LOGINBTN, _T("PNG"));  
  2. m_btnLogin.LoadAltImage(IDB_LOGINACTIVE, _T("PNG"));  
  3. m_btnLogin.EnableToggle(TRUE);  

效果图:

备注:因为背景图是png的,而LoadFromResource只能加载BMP图像,所以用函数转换一下。

[cpp] view plaincopyprint?
  1. bool CTransEditDlg::LoadImageFromResource( CImage* pImage, UINT nResID, LPCWSTR lpTyp)  
  2. {  
  3.    ASSERT(pImage);  
  4.   pImage->Destroy();  
  5.   HRSRC hrsrc=FindResource(AfxGetResourceHandle(),MAKEINTRESOURCE(nResID),lpTyp);  
  6.   if (hrsrc==NULL)  
  7.   {  
  8.    return   false;  
  9.   }  
  10.   
  11.   HGLOBAL hImageData=LoadResource(AfxGetResourceHandle(),hrsrc);  
  12.   if (hImageData==NULL)  
  13.   {  
  14.    FindResource(AfxGetResourceHandle(),MAKEINTRESOURCE(nResID),lpTyp);  
  15.    return false;  
  16.   }  
  17.   // 锁定内存中的指定资源  
  18.   LPVOID lpVoid    = LockResource(hImageData);  
  19.   
  20.   LPSTREAM pStream = NULL;  
  21.   DWORD dwSize   = SizeofResource(AfxGetResourceHandle(), hrsrc);  
  22.   HGLOBAL hNew   = GlobalAlloc(GHND, dwSize);  
  23.   LPBYTE lpByte  = (LPBYTE)::GlobalLock(hNew);  
  24.   memcpy(lpByte, lpVoid, dwSize);  
  25.   
  26.   // 解除内存中的指定资源  
  27.   GlobalUnlock(hNew);  
  28.   
  29.   // 从指定内存创建流对象  
  30.   HRESULT ht = CreateStreamOnHGlobal(hNew, TRUE, &pStream);  
  31.   if ( ht != S_OK )  
  32.   {  
  33.    GlobalFree(hNew);  
  34.   }  
  35.   else  
  36.   {  
  37.    // 加载图片  
  38.            pImage->Load(pStream);  
  39.   
  40.    GlobalFree(hNew);  
  41.   }  
  42.   
  43.   // 释放资源  
  44.   FreeResource(hImageData);  
  45.   return true;  
  46.   
  47. }  

然后构造函数里面添加

[cpp] view plaincopyprint?
  1. CTransEditDlg::CTransEditDlg(CWnd* pParent /*=NULL*/)  
  2.     : CDialogEx(CTransEditDlg::IDD, pParent)  
  3. {  
  4.     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);  
  5.     //m_back.Load(_T("res/back.png"));外部加载  
  6.     //m_back.LoadFromResource(AfxGetInstanceHandle(), IDB_BACK);仅能加载BMP图像  
  7.     LoadImageFromResource(&m_back, IDB_BACK, _T("PNG"));//内部加载  
  8. }  

下载链接:http://www.kuaipan.cn/file/id_6251642726945338.html


参考资料:

1. (透明EDIT、STATIC控件)http://www.codeproject.com/Articles/1436/CEdit-CStatic-Transparency-Control?fid=2701&fr=1&df=90&mpp=25&noise=3&prof=False&sort=Position&view=Quick&spc=Relaxed#xx0xx

2.(透明BUTTON)http://www.codeproject.com/Articles/26887/A-user-draw-button-that-supports-PNG-files-with-tr

3.http://blog.sina.com.cn/s/blog_8406420b0100rz3u.html



本文来自:http://blog.csdn.net/hayyoung/article/details/8635989