• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            SDK 程序使用SkinMagic工具包換皮膚

            作者:武漢理工大學 自動化 林津


            下載源代碼


              在看《Windows 程序設計》的時候,就在用 SkinMagic 換膚,但 SkinMagic 中的 SDK 程序例子只能用文件方式加載皮膚,很不方便,而且還有一些Bug。后來看了下面這篇文章才茅塞頓開,終于會用 SkinMagic 把皮膚加入靜態(tài)資源為 SDK 程序換膚。在 VCKBASE 網站的在線雜志中我看到一篇題為“用SkinMagic工具包創(chuàng)建換皮膚程序”的文章。我和上面文章的作者聯(lián)系過,告訴了他我的想法并找出他程序中一個微不足道的 Bug!上面文章用MFC換膚,我現(xiàn)在寫的可以說是他的 SDK 版。主要通過簡單處理解決了標題出現(xiàn) [Powered by SkinMagic] 的問題,換用 SkinMagic SDK 1.0 Library,支持更多皮膚。

            如何使用:

            1. 新建 SDK 工程后,將 SkinMagic 包中的 SkinMagicLib.h、SkinMagicLib.lib、DETOURS.lib 從示例工程./res 中,點擊Project->Add To Project->Files,包含到工程中。
            2. 在 Resource View 中點擊 Import 菜單引入幾個 Skin 二進制文件放在相同的"SKINMAGIC"文件夾下,分別給起一個名字(見源程序)。
            3. 在 stdafx.h 中加入 #include "SkinMagicLib.h"
            4. 在 WinMain 開頭添加如下內容:
              int APIENTRY WinMain(HINSTANCE hInstance,
                                   HINSTANCE hPrevInstance,
                                   LPSTR     lpCmdLine,
                                   int       nCmdShow)
              {
               	//加載SkinMagicLib.lib、DETOURS.lib 庫
              	InitSkinMagicLib( hInstance, 
              			  "LINJIN", 
              			  NULL,NULL ); 
              
              	//LoadSkinFile("corona.smf");
              	//加載靜態(tài)自定義皮膚資源
              	LoadSkinFromResource( GetModuleHandle(NULL), 
              	                      "XPBLUE" ,
              	                      "SKINMAGIC");
              	//為程序中對話框換膚	                      
              	SetDialogSkin( "Dialog" ) ;
              	
              	......
              
              	//在 WinMain  結束時釋放 SkinMagic 資源。 
              	ExitSkinMagicLib();
              }
              
            5. 還有在InitInstance 中:
              BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
              {
                 ......
                 //如果程序用到菜單
                 //要在 SetWindowSkin 之前用,否則 hMenu 為 NULL
                 hMenu = GetMenu (hWnd) ; 
                 
                 // 把皮膚加入程序框架
                 SetWindowSkin( hWnd , "MainFrame" );
                 ShowWindow(hWnd, nCmdShow);
                 UpdateWindow(hWnd);
              
                 return TRUE;
              }
              
            6. 還有在WndProc中,使定義的菜單資源和皮膚資源對應起來:
              LRESULT CALLBACK WndProc(HWND hWnd, 
                                       UINT message, 
                                       WPARAM wParam, 
                                       LPARAM lParam)
              {
              	int wmId, wmEvent;
              	PAINTSTRUCT ps;
              	HDC hdc;
              	TCHAR szHello[MAX_LOADSTRING];
              	LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
              	
                      //使用菜單變換皮膚,
                      //通過數(shù)組的持續(xù)把菜單和皮膚資源對應,
              	static char* idColor [7] = { "XPBLUE",  "CORONA", "KROMO",
                                              "XPGREAN", "XPLUS","XPSTEEL","DEVIOR" } ; 
              
              	......
              	
              	switch (wmId)
              	{
              	case IDM_XP:         // Note: Logic below
                     	case IDM_CORONA:        //   assumes that IDM_WHITE
                     	case IDM_KROMO:          //   through IDM_BLACK are
                     	case IDM_XPGREAN:        //   consecutive numbers in
                     	case IDM_XPLUS :         //   the order shown here.
              	case IDM_XPSTEEL:
              	case IDM_DEVIOR:
              	
                     	//菜單選擇
                      CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
                      iSelection = wmId ;
                      CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;
                      LoadSkinFromResource( GetModuleHandle(NULL), 
              			   idColor[LOWORD (wParam) - IDM_XP] ,
              			   "SKINMAGIC" );
                      InvalidateRect (hWnd, NULL, TRUE) ;
                      return 0 ;
              
              	case IDM_ABOUT:
              	   DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
              	   break;
              	case IDM_EXIT:
              	   DestroyWindow(hWnd);
              	   break;
              	default:
              	   return DefWindowProc(hWnd, message, wParam, lParam);
              	}
              }
              
            還有些細節(jié)都在代碼中,示例工程無需做任何修改可以直接編譯…。
            示例工程里的 ./res 中有 SkinMagic SDK 1.0 Library 的 SkinMagicLib.lib (經處理不會顯示[Powered by SkinMagic])、DETOURS.lib 和眾多皮膚,可以拿到使用。

            最后,SkinMagic 有一個 Bug,一直都沒有解決——就是子菜單返回為 0,不能使用。

            希望作者和大家有好的辦法......

            下面是例子程序的截圖:






            ?

            posted on 2006-06-22 16:45 楊粼波 閱讀(428) 評論(0)  編輯 收藏 引用 所屬分類: 文章收藏

            久久久久亚洲国产| 亚洲综合久久久| 99久久精品久久久久久清纯| 国产AⅤ精品一区二区三区久久| 久久国产成人精品国产成人亚洲| 日本高清无卡码一区二区久久| 欧美黑人又粗又大久久久| 国产精品久久久久久久久久免费| 久久久久av无码免费网| 精品久久久久久| 色欲久久久天天天综合网精品 | 久久午夜福利电影| 亚洲国产精品久久电影欧美| 久久久青草青青国产亚洲免观| 亚洲国产精品无码久久SM| 久久久久久一区国产精品| 99国产精品久久久久久久成人热| 欧美大战日韩91综合一区婷婷久久青草| 久久精品国产第一区二区三区| 久久久久国产亚洲AV麻豆| 久久精品成人国产午夜| 久久国产精品99精品国产| 囯产极品美女高潮无套久久久| 久久无码人妻精品一区二区三区 | 亚洲欧美伊人久久综合一区二区| 久久一区二区三区99| 久久久久久极精品久久久| 久久综合丁香激情久久| 欧美亚洲国产精品久久蜜芽| 精品国产乱码久久久久久郑州公司| 久久久久久精品无码人妻| 精品国产乱码久久久久久人妻| 久久久一本精品99久久精品88| 人妻少妇精品久久| 久久无码一区二区三区少妇| 日产久久强奸免费的看| 色妞色综合久久夜夜| 色综合久久综合中文综合网| 人妻精品久久无码区| 国产精品久久自在自线观看| 国产精品久久久久久搜索|