設定windows視窗ICON 【windows 編程】【API】【原創】

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   strong   檔案   

 1. ICON介紹

      最近開始接觸windows 編程,因此將自己所接觸的一些零散的知識進行整理並記錄。本文主要介紹了如何更改windows對話方塊視窗的ICON表徵圖。這裡首先介紹一下windows ICON定義。在我們使用的windows APP上,一般都存在兩個ICON。一個是開啟APP後顯示與左上方的小的表徵圖檔案(SMALL ICON)以及按下Alt+Tab切換視窗時顯示的一個大的表徵圖檔案(BIG ICON)。以windows內建的記事本程式為例,小的表徵圖檔案如1所示:

 

圖1 記事本程式的SMALL ICON

大表徵圖樣式2所示:

圖2 記事本程式的BIG ICON

    

2. 設定ICON實現

      在上面的ICON定義介紹完後,進入本文的主要內容——通過windows 編程設定windows視窗的ICON。整個設定ICON過程分為以下幾個步驟:

2.1 擷取ICO資源檔

(1)首先可以到百度圖片上搜“ico”找到合適的一個表徵圖檔案,另存到本地。(注意,這裡儲存下來的是gif或者png檔案,需要在網上用轉換工具轉為ico檔案)

(2)將上一步下載的表徵圖檔案(gif或者png等)轉換為ico(下面的地址可以參考 http://www.img2ico.net/)本文樣本採用的ICON表徵圖3所示:

圖3 樣本ICON

 

2.2 建立空的win32工程,建立起基本的對話方塊以及載入ICON資源
   (1)Resource Files -> Add -> Resource -> Dialog -> New  // 建立對話方塊視窗,效果如下

圖4 建立一個對話方塊視窗


   (2)Resource Files -> Add -> Resource -> Icon -> Import // 引入步驟1中產生的ico檔案

圖5 引入ICON資源


   (3)修改產生的對話方塊視窗ID為IDD_MAIN, 表徵圖檔案的ID為IDI_APPICON(改名後含義更加明確,且方便後續調用記憶方便)

 

2.3 程式實現:設定視窗的ICON
   (1)設計測試視窗CTestDlg類,並定義視窗過程函數以及其他的初始化、關閉操作。首先定義了CTestDlg視窗,並且定義了相關的訊息處理函數Test_Proc、Test_OnInitDlg、Test_OnCommand和Test_OnClose。    

/************************************************************************//* file   : 定義一個測試視窗類別,用坐改變視窗ICON的樣本視窗 * author : Huagang Li * date   : 2014-8-21 09:42:53 * tips   : 1. 將視窗設定為一個統一的類,方便添加新的功能 *          2. 下面的ifndef 後面是一個guid產生器產生的字串序列,保證唯一性 * *//************************************************************************/#ifndef _E159C66B_2CD4_4E0E_861E_9328E6E99B66_H_#define _E159C66B_2CD4_4E0E_861E_9328E6E99B66_H_#include <Windows.h>class CTestDlg{public:    static BOOL WINAPI Test_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);private:    static BOOL Test_OnInitDlg(HWND hWnd, HWND hWndFocus, LPARAM lParam);    static BOOL Test_OnCommand(HWND hWnd, int id, HWND hWndCtl, LPARAM lParam);    static BOOL Test_OnClose(HWND hWnd);};#endif // _E159C66B_2CD4_4E0E_861E_9328E6E99B66_H_

    具體的介面實現如下:

#include "SetIcon.h"#include "resource.h"#include <WindowsX.h>// 測試視窗的過程處理函數BOOL WINAPI CTestDlg::Test_Proc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){    switch (uMsg)    {        HANDLE_MSG(hWnd, WM_INITDIALOG, Test_OnInitDlg);        HANDLE_MSG(hWnd, WM_COMMAND, Test_OnCommand);        HANDLE_MSG(hWnd, WM_CLOSE, Test_OnClose);    }    return FALSE;}// 測試視窗的初始化函數,設定視窗ICON就可以在這裡進行BOOL CTestDlg::Test_OnInitDlg( HWND hWnd, HWND hWndFocus, LPARAM lParam ){    BOOL bRet = TRUE;    do     {        // 設定視窗表徵圖為下載的ico        HINSTANCE hInstance = ::GetModuleHandle(NULL);        if (NULL == hInstance)        {            bRet = FALSE;            break;        }        HICON hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPICON));        if (NULL == hIcon)        {            bRet = FALSE;            break;        }            // 設定視窗的大小表徵圖         // 大表徵圖:按下alt+tab鍵切換視窗時對應的表徵圖         // 小表徵圖:就是視窗左上方對應的那個表徵圖        ::SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);        ::SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);    } while (false);    return bRet;}// 視窗其他命令響應函數BOOL CTestDlg::Test_OnCommand( HWND hWnd, int id, HWND hWndCtl, LPARAM lParam ){    return TRUE;}// 關閉測試視窗BOOL CTestDlg::Test_OnClose( HWND hWnd ){    ::EndDialog(hWnd, 0);    return TRUE;}

   (2)設定Icon表徵圖核心代碼如下(設定ICON最核心的部分

//////////////////////////////////////////////////////////////////// 核心代碼區HINSTANCE hInstance = ::GetModuleHandle(NULL);HICON hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPICON));    // 設定視窗的大小表徵圖// 大表徵圖:按下alt+tab鍵切換視窗時對應的表徵圖// 小表徵圖:就是視窗左上方對應的那個表徵圖::SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);::SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);//////////////////////////////////////////////////////////////////

   (3)編寫主函數,並執行個體化測試視窗,運行觀察實際效果。主函數如下所示:

/************************************************************************//* file   : 程式的進入點 * author : Huagang Li * date   : 2014-8-21 10:01:11 * tips   : 將視窗的定義實現在其他類中,main入口只儲存視窗例化 * *//************************************************************************/#include <windows.h>#include <CommCtrl.h>#include "SetIcon.h"#include "resource.h"// InitCommonControls倚賴的庫,需要在這裡加上#pragma comment(lib, "comctl32.lib")int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd ){    InitCommonControls();    ::DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, CTestDlg::Test_Proc);    return EXIT_SUCCESS;}

 

最後,來看運行後的結果:

圖6 運行結果—SMALL ICON

圖7 運行結果—大表徵圖

從圖6和圖7中可以看出,視窗的ICON均已發生了變化,證明了本文方法的可行性。

 

3. 總結

      一句話總結,設定windows視窗ICON的方法就是:準備好ICON資源,然後發送給作業系統WM_SETICON訊息即可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.