• <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 把皮膚加入靜態資源為 SDK 程序換膚。在 VCKBASE 網站的在線雜志中我看到一篇題為“用SkinMagic工具包創建換皮膚程序”的文章。我和上面文章的作者聯系過,告訴了他我的想法并找出他程序中一個微不足道的 Bug!上面文章用MFC換膚,我現在寫的可以說是他的 SDK 版。主要通過簡單處理解決了標題出現 [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");
              	//加載靜態自定義皮膚資源
              	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);
              	
                      //使用菜單變換皮膚,
                      //通過數組的持續把菜單和皮膚資源對應,
              	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);
              	}
              }
              
            還有些細節都在代碼中,示例工程無需做任何修改可以直接編譯…。
            示例工程里的 ./res 中有 SkinMagic SDK 1.0 Library 的 SkinMagicLib.lib (經處理不會顯示[Powered by SkinMagic])、DETOURS.lib 和眾多皮膚,可以拿到使用。

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

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

            下面是例子程序的截圖:






            ?

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

            无码人妻久久一区二区三区蜜桃| 成人午夜精品久久久久久久小说| 欧美日韩精品久久免费| 久久精品日日躁夜夜躁欧美| 国产午夜免费高清久久影院 | 亚洲色欲久久久综合网| 国产精品一区二区久久不卡| 久久久久久国产精品免费免费| 偷偷做久久久久网站| 欧美日韩中文字幕久久伊人| 狠狠色丁香久久婷婷综合蜜芽五月| 久久久久久国产a免费观看黄色大片| 久久精品国产亚洲AV无码娇色| 精品久久久久国产免费| 久久久亚洲裙底偷窥综合| 成人国内精品久久久久一区| 久久91精品国产91久| 国产精品无码久久久久| 久久亚洲国产成人精品性色| 中文字幕久久久久人妻| 久久最新免费视频| 久久97久久97精品免视看| 99精品久久精品| 久久综合香蕉国产蜜臀AV| 狠狠色丁香婷婷久久综合| 三级片免费观看久久| 九九久久精品无码专区| 久久综合狠狠综合久久激情 | 日产精品99久久久久久| 久久精品中文闷骚内射| 人妻少妇久久中文字幕一区二区| 久久久久亚洲精品日久生情| 日本久久久久久久久久| 久久久久一本毛久久久| 久久精品无码专区免费| 亚洲国产综合久久天堂| 久久久久人妻一区二区三区| 久久99国产精品久久99小说| 精品久久久久成人码免费动漫| 久久亚洲精品国产精品婷婷| 综合人妻久久一区二区精品|