• <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>

            牽著老婆滿街逛

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

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

            作者:武漢理工大學(xué) 自動化 林津


            下載源代碼


              在看《Windows 程序設(shè)計》的時候,就在用 SkinMagic 換膚,但 SkinMagic 中的 SDK 程序例子只能用文件方式加載皮膚,很不方便,而且還有一些Bug。后來看了下面這篇文章才茅塞頓開,終于會用 SkinMagic 把皮膚加入靜態(tài)資源為 SDK 程序換膚。在 VCKBASE 網(wǎng)站的在線雜志中我看到一篇題為“用SkinMagic工具包創(chuàng)建換皮膚程序”的文章。我和上面文章的作者聯(lián)系過,告訴了他我的想法并找出他程序中一個微不足道的 Bug!上面文章用MFC換膚,我現(xiàn)在寫的可以說是他的 SDK 版。主要通過簡單處理解決了標(biāo)題出現(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 二進(jìn)制文件放在相同的"SKINMAGIC"文件夾下,分別給起一個名字(見源程序)。
            3. 在 stdafx.h 中加入 #include "SkinMagicLib.h"
            4. 在 WinMain 開頭添加如下內(nèi)容:
              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  結(jié)束時釋放 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中,使定義的菜單資源和皮膚資源對應(yīng)起來:
              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ù)把菜單和皮膚資源對應(yīng),
              	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);
              	}
              }
              
            還有些細(xì)節(jié)都在代碼中,示例工程無需做任何修改可以直接編譯…。
            示例工程里的 ./res 中有 SkinMagic SDK 1.0 Library 的 SkinMagicLib.lib (經(jīng)處理不會顯示[Powered by SkinMagic])、DETOURS.lib 和眾多皮膚,可以拿到使用。

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

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

            下面是例子程序的截圖:






            ?

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

            人妻丰满AV无码久久不卡| 久久精品国产亚洲AV不卡| 婷婷久久综合九色综合九七| 国产综合久久久久| 国产色综合久久无码有码| 久久久午夜精品| 国产A级毛片久久久精品毛片| 2021国产精品午夜久久| 久久久久av无码免费网| 日日躁夜夜躁狠狠久久AV| 99久久无色码中文字幕人妻| 久久久久亚洲AV成人片| A狠狠久久蜜臀婷色中文网| 久久久久免费精品国产| 国产成人无码精品久久久久免费| 国产成人AV综合久久| 久久婷婷五月综合97色直播| 久久久国产亚洲精品| 久久亚洲私人国产精品| 狠狠色婷婷综合天天久久丁香| 久久91综合国产91久久精品| 狠狠色伊人久久精品综合网| 性做久久久久久久久| 亚洲国产精品高清久久久| 久久午夜电影网| 国产69精品久久久久观看软件| 性欧美大战久久久久久久久| 国产成人久久激情91| 亚洲七七久久精品中文国产| 精品久久久噜噜噜久久久| 久久久WWW免费人成精品| 婷婷伊人久久大香线蕉AV| 99久久无码一区人妻| 伊人久久大香线蕉av不变影院 | 99国产欧美久久久精品蜜芽| 狠狠精品久久久无码中文字幕 | 996久久国产精品线观看| 亚洲国产成人久久笫一页| 精品久久久久久国产| 国产亚洲精品久久久久秋霞| 精品无码久久久久久国产|