程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ActiveSkin 4.3 軟件換膚

ActiveSkin 4.3 軟件換膚

編輯:.NET實例教程

ActiveSkin是一款給軟件更換皮膚的ActiveX控件。它很還好的將軟件界面設計工作從繁瑣程序代碼編寫中解放出來,使得功能設計者可以專心於功能代碼的實現,而把軟件界面交給美工人員處理。提高了界面設計的工作效率,是一種很好的軟件設計思想。

下面通過三個示例來介紹他的一般使用。

示例一:標准型皮膚SkinForm的對話框工程
  在VC環境下建立一個MFC基本對話框工程。在對話框的資源文件裡Dlg.rc設計對話框界面中,刪去已有的按鈕Buttons和標簽Lables,並插入ActiveSkin的ActiveX控件,命名為IDC_SKIN。右鍵點擊ActiveSkin控件,在ActiveX屬性裡選擇LoadSkin菜單項,可預先加載一個Skin文件。
在StdAfx.h中 //{{AFX_INSERT_LOCATION}} 之前添加以下語句:

    //目的是導入ActiveSkin的函數接口庫。    #include <atlbase.h>    #import "actskn43.ocx" no_implementation raw_interfaces_only raw_native_types    using namespace ACTIVESKINLib;
接著,在Dlg.cpp文件裡添加語句:
    CComQIPtr<ISkin> m_pSkin=GetDlgItem(IDC_SKIN)->GetControlUnknown();//m_pSkin是應用程序全局量。    m_pSkin->LoadSkin(L"皮膚文件X的路徑");//如果ActiveSkin控件中已有皮膚,此句可省略。    m_pSkin->ApplySkin((int)m_hWnd);
  編譯運行,可以看到皮膚文件X成為了程序的運行界面。如果想要在程序運行時更換皮膚,那也是可以的。在對話框上建立一個Button,並添加Click事件:
    void CMy1Dlg::OnBNewSkin()     {      static char BASED_CODE szFilter[] = "ActiveSkin Files (*.skn)|*.skn||";//文件過濾器設置。      CFileDialog dlg(FALSE, ".skn", NULL, OFN_HIDEREADONLY, szFilter);//Skin文件選擇窗口。      if (dlg.DoModal() == IDOK)//Skin文件選擇成功:      {        USES_CONVERSION;        m_pSkin->LoadSkin(T2W(dlg.GetPathName()));//載入指定的Skin文件。        m_pSkin->ApplySkin((int)m_hWnd);//使當前Skin生效。      }    } 
  你會發現運行時主窗口已經換膚成功了,但“關於”對話框等非主窗口並沒變化。需要在AboutDlg的OnInitDialog()事件中加入一句:
    m_pSkin->ApplySkin((int)m_hWnd);
再運行就一切Ok了!

示例二:標准皮膚SkinForm的多文檔工程
  和示例一的做法類似,不同的只是子窗體在ChildFrm.cpp的Create事件中要做修改:
    BOOL bRes = CMDIChildWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, pContext);    m_pSkin->ApplySkin((long)m_hWnd);    return bRes;
這樣就可以了。

示例三:自由皮膚SkinFreeForm的事件操作
  和上述的SkinForm不同,SkinFreeFrom是另一類型的皮膚文件方案。因此它的操作方法上就有所不同了。可以參照ActiveSkin自帶樣例中的DesktopColorizer一例。SkinForm和SkinFreeFrom的主要區別在於SkinApply方法和事件的驅動方式上。
    if(FAILED(m_pSkin->LoadSkin(Temp))||   //均使用LoadSkin()裝載某一Skin,參數是Skin文件的路徑名。      FAILED(m_pSkin->ApplySkinByName((long)m_hWnd, L"FreeForm")))      //SkinForm類型的皮膚使用ApplySkin使其生效,      //這種方式會自動將某Skin中的所有SkinObject元素替代指定Handle的窗口。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved