使用GDI載入PNG實現自定義不規則按鈕
不能直接截圖!@!!!!氣死了。,。改
1---先把按鈕的圖片載入資源裡面,這樣可以在後面直接獲得它的ID號。
例如載入後:PNG圖片ID號為 :IDB_PNG1
2---然後我們把一堆GDI的程式碼加入工程中,為了整潔新建立了資料夾,等會載入標頭檔案的時候要考慮到下一層目錄。
就是這一一堆程式碼:圖片沒顯示。在一個資料夾理裡。
不用看,新增進來待會在自己要新增的視窗DLG.CPP和DLG.H中定義幾個變數即可。
3---然後來到目標視窗的.H檔案PUBLIC中:
(1)--新增標頭檔案 #include "pngbutton\GdipButton.h"
(2)---自定義一個物件,綠色部分,是一個按鈕啊。
3---然後來到.CPP中,新增標頭檔案(其實頭應該新增在之前那個.H才對把,我亂來了):#include "pngbutton\MemDC.h"
4--在一個函式中新增:DDX_Control(pDX, IDC_BUTTON1, m_cClose);即如下;
IDC_BUTTON1為要關聯的按鈕,不然人家怎麼知道畫到什麼按鈕上去。
void Other_title_Dlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Control(pDX, IDC_BUTTON1,m_cClose);
CDialogEx::DoDataExchange(pDX);
}
5--- 到 BOOL Other_title_Dlg::OnInitDialog() 初始化函式,加上載入圖片的步驟,我把它放到最後面了:
//------------------------------------------------------------------------------
m_cClose.LoadStdImage(IDB_PNG14, _T("PNG"));//圖片按鈕
m_cClose.LoadAltImage(IDB_PNG15, _T("PNG"));//因為一個是按下的,所以添加了兩個不知有沒用
m_cClose.EnableToggle(TRUE);
//------------------------------------------------------------------------------
6---最後是在自己工程上的stdafx.h上添加了以下程式碼,關於新增GDI庫文的,反正沒了就不行。
#if defined(_MSC_VER) && _MSC_VER == 1200
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endif
#include <Specstrings.h>
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;
// VS2005
#else
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;
#endif //
#define WIN32_LEAN_AND_MEAN
7----然後運執行後就能夠出現效果了:
原本是這樣的:
貼圖後使用是這個:
它有個問題貼圖大小不能在視窗上自由更改,而是在美工作圖的時候就已經要限制好大小。