首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

SkinLoad 程式介面換膚工具:靜態/動態載入兩種模式

     編輯:關於VC++

SkinLoad 提供幾個 API 即可為程式套用皮膚(含系統對話框),並附贈 SkinLoadMaker 皮膚編輯器自製皮膚。提供靜態連結與動態載入兩種整合方式。

方式一:靜態連結動態庫

  1. 專案加入 SkinLoadLib.h、SkinLoad.lib
  2. App 類別:#include "SkinLoadLib.h"
  3. InitInstance():
InitSkinLoad(GetCurrentThreadId());
LoadSkin("xp_normal.skin");
  1. ExitInstance():ExitSkinLoad();

缺點:執行時必須有 SkinLoad.dll,否則無法啟動。

方式二:動態載入 DLL

// App 類別成員
HINSTANCE m_hDllSkin;

BOOL CMyApp::InitInstance()
{
    m_hDllSkin = LoadLibrary("SkinLoad.dll");
    if (m_hDllSkin)
    {
        typedef int (*INITSKIN)(DWORD);
        typedef bool (*LOADSKIN)(char*);
        INITSKIN pInit = (INITSKIN)GetProcAddress(m_hDllSkin, "InitSkinLoad");
        LOADSKIN pLoad = (LOADSKIN)GetProcAddress(m_hDllSkin, "LoadSkin");
        if (pInit && pLoad)
        {
            pInit(GetCurrentThreadId());
            pLoad("xp_normal.skin");
        }
    }
    // ...
}

int CMyApp::ExitInstance()
{
    if (m_hDllSkin)
    {
        typedef bool (*EXITSKIN)();
        EXITSKIN pExit = (EXITSKIN)GetProcAddress(m_hDllSkin, "ExitSkin");
        if (pExit) pExit();
        FreeLibrary(m_hDllSkin);
    }
    return CWinApp::ExitInstance();
}

優點:可檢測 DLL 是否存在,避免程式啟動失敗。

SkinLoadMaker 皮膚編輯器

  • 執行時產生 Temp 資料夾含所有圖素範本
  • 標題列背景:正常/失去焦點上下疊合
  • 標題列按鈕:四態(Normal/Hover/Down/Disabled)
  • 一般按鈕:四態
  • 直接修改 Temp 內圖素並產生 .skin 檔

內含 xp_normal.skin 範例皮膚,未修改直接產出即為相同效果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved