1. 程式人生 > >使用GDI載入PNG實現自定義不規則按鈕

使用GDI載入PNG實現自定義不規則按鈕

不能直接截圖!@!!!!氣死了。,。改

1---先把按鈕的圖片載入資源裡面,這樣可以在後面直接獲得它的ID號。

例如載入後:PNG圖片ID號為  :IDB_PNG1

2---然後我們把一堆GDI的程式碼加入工程中,為了整潔新建立了資料夾,等會載入標頭檔案的時候要考慮到下一層目錄。

就是這一一堆程式碼:圖片沒顯示。在一個資料夾理裡。

不用看,新增進來待會在自己要新增的視窗DLG.CPP和DLG.H中定義幾個變數即可。

3---然後來到目標視窗的.H檔案PUBLIC中:

(1)--新增標頭檔案     #include "pngbutton\GdipButton.h"

(2)---自定義一個物件,綠色部分,是一個按鈕啊。

CGdipButtonm_cClose;//----圖片按鈕

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----然後運執行後就能夠出現效果了:

原本是這樣的:

貼圖後使用是這個:

它有個問題貼圖大小不能在視窗上自由更改,而是在美工作圖的時候就已經要限制好大小。