Forráskód Böngészése

1、使用gdi+加载jpg格式,并转换成HBITMAP句柄,使得按钮能显示指定目录的jpg图片。

Jeff 6 éve
szülő
commit
ccb944b25b

+ 12 - 1
source/hook/WeChats/WeChats.cpp

@@ -13,7 +13,7 @@
 #define new DEBUG_NEW
 #endif
 
-
+ULONG_PTR CWeChatsApp::m_gdiplusToken;
 // CWeChatsApp
 
 BEGIN_MESSAGE_MAP(CWeChatsApp, CWinAppEx)
@@ -53,6 +53,9 @@ BOOL CWeChatsApp::InitInstance()
 
 	AfxEnableControlContainer();
 
+	GdiplusStartupInput gdiplusStartupInput;
+	GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
+
 	// 获取配置信息;
 	GetIniInfo();
 	GetDebugPriv();
@@ -110,3 +113,11 @@ BOOL CWeChatsApp::InitInstance()
 	//  而不是启动应用程序的消息泵。
 	return FALSE;
 }
+
+
+int CWeChatsApp::ExitInstance()
+{
+	// TODO: 在此添加专用代码和/或调用基类
+	Gdiplus::GdiplusShutdown(m_gdiplusToken);
+	return CWinAppEx::ExitInstance();
+}

+ 2 - 1
source/hook/WeChats/WeChats.h

@@ -19,7 +19,7 @@ class CWeChatsApp : public CWinAppEx
 {
 public:
 	CWeChatsApp();
-
+	static ULONG_PTR m_gdiplusToken;
 // ÖØÐ´
 	public:
 	virtual BOOL InitInstance();
@@ -27,6 +27,7 @@ public:
 // ʵÏÖ
 
 	DECLARE_MESSAGE_MAP()
+	virtual int ExitInstance();
 };
 
 extern CWeChatsApp theApp;

+ 39 - 1
source/hook/WeChats/WxMgr.cpp

@@ -3,6 +3,37 @@
 #include "Global.h"
 #include "resource.h"
 
+HBITMAP LoadImgFromFile(LPCTSTR lpPath)
+{
+	if (!PathFileExists(lpPath))
+		return NULL;
+
+	Bitmap *pBitmap = NULL;
+#ifdef UNICODE
+	*pBitmap = Bitmap::FromFile(lpPath);
+#else
+	BSTR strtmp = _bstr_t(lpPath);
+	pBitmap = Bitmap::FromFile(strtmp, TRUE);
+	SysFreeString(strtmp);
+#endif
+
+	HBITMAP hBitmap = NULL;
+	Status status = pBitmap->GetLastStatus();
+	if (Ok == status)
+	{
+		status = pBitmap->GetHBITMAP(Color(0, 0, 0), &hBitmap);
+		if (Ok == status)
+		{
+			// enjoy of bitmap;
+		}
+	}
+
+	if (pBitmap)
+		delete pBitmap;
+
+	return hBitmap;
+}
+
 TCHAR	CWxMgr::m_szWeChatPath[MAX_PATH] = { 0 };
 CWxMgr::CWxMgr(CWnd *pMainWnd) :m_pMainWnd(pMainWnd)
 {
@@ -140,7 +171,14 @@ VOID CWxMgr::AddMapItem(DWORD dwProcId, LPCTSTR lpItemName)
 	wxObjInfo.pWxButton->Create(lpItemName, WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX, CalcRect(), m_pMainWnd, GetFreeButtonId(dwProcId));
 	wxObjInfo.pWxButton->OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 60);
 	//wxObjInfo.pWxButton->DrawTransparent();
-	wxObjInfo.pWxButton->SetIcon(ICON_CHECK);
+	//wxObjInfo.pWxButton->SetIcon(ICON_CHECK);
+#ifdef DEBUG
+	//HBITMAP hBitmapIn = (HBITMAP)::LoadImage(NULL, _T("E:\\bin\\WeChats2017\\image\\132.jpg"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
+	HBITMAP hBitmapIn = LoadImgFromFile(_T("E:\\bin\\WeChats2017\\image\\132.jpg"));
+	if (hBitmapIn)
+		wxObjInfo.pWxButton->SetBitmaps(hBitmapIn, COLORREF(0));
+#endif // DEBUG
+
 	wxObjInfo.pWxButton->ShowWindow(SW_SHOW);
 	wxObjInfo.pWxButton->SetCheck(FALSE);
 

+ 3 - 1
source/hook/WeChats/stdafx.h

@@ -42,7 +42,9 @@
 #include <afxcontrolbars.h>
 
 
-
+#include <gdiplus.h>
+using namespace Gdiplus;
+#pragma comment(lib, "gdiplus.lib")