VS中基於對話框的MFC利用換膚改變邊框顏色及格式


第一版本: 

http://ishare.iask.sina.com.cn/f/13836420.html?from=like

2. http://www.cnblogs.com/phinecos/archive/2008/04/14/1152696.html

3. http://www.emsky.net/bbs/archiver/?tid-28229.html

4. http://hi.baidu.com/wdmzslh/item/af389ef068779d28743c4c2e

5. http://www.lewensky.cn/read.php/113.htm

想添加一個皮膚以美化頁面怎么辦,現如今有很多的換膚工具,不過幾乎都是收費的,很無奈呀!地址1中可以下載Skin++2.1破解版的50個皮膚,不知道破解的徹底否,盡量不要用於商業,否則可能會有麻煩的。然后地址2345主要介紹如何將Skin++應用於MFC的,請關注。

如何使用皮膚

其大致的步驟如下:

1. 將skinppwtl.dll、SkinPPWTL.libSkinPPWTL.h及選擇的皮膚(**.sskcopy至工程文件夾下;

2. 在項目-屬性-配置屬性-連接器-附加依賴項中添加Skin++的庫文件(SkinPPWTL.lib);

3. 在文件stdafx.h中添加Skin++的頭文件(#include "SkinPPWTL.h");

4. 在文件工程名.cpp”中的函數InitInstance中添加語句skinppLoadSkin(_T("blue.ssk"));;

按照以上步驟差不多就可以使用Skin++的免費皮膚了,我是應用在VS2010基於對話框的MFC中的,在使用的過程中步驟34都需要在解決方案資源管理器下查找相應的而文件,在VC6.0中只需要在類視圖中就可以查找。

另外,Skin++免費版是只支持ANSI方式,但VS2010在默認情況下編碼為UNICODE方式,如果在編譯鏈接時不把編碼改為ANSI方式則無法正常生成,故更改:項目-屬性-配置屬性-常規-字符集-使用多字節字符集,如此,便可以正常使用Skin++的皮膚了。

但是,有可能項目在使用多字節字符集下編譯出現其他的錯誤,如不能將CString轉化為LPCWSTR等。解決方法如地址2所述,將字符集改回為原來的UNICODE方式,然后將skinppLoadSkin(_T("blue.ssk"));改為skinppLoadSkin("blue.ssk");

然后在SkinPPWTL.h頭文件里定義一個typedef char MYCHAR變量,並替換所有的TCHAR,並將語句TCHAR_tcscpy(szResImageName,_T(""));改為strcpy(szResImageName,"");即可,編譯即可通過。至於其他的卸載、更換,有待探索。

 

第二版本:

1.新建基於對話框的MFC程序pifuTest。

2.
復制  SkinH.dll、SkinH.lib、SkinH.h 以及皮膚文件Aero.she 至工程目錄下;
我把用到的皮膚和庫,以及其他的皮膚打包到百度盤了。
http://pan.baidu.com/share/link?shareid=1987069352&uk=268492124
3.
在工程中引入 .h 頭文件及 Lib 靜態庫
#include "SkinH.h"
#pragma comment(lib,"SkinH.lib")
 
4.
在創建窗口之前加載皮膚文件,這里是對話框初始化的時候,第一句。
BOOL CPifuTestDlg::OnInitDialog()
{
SkinH_AttachEx(("Aero.she"), NULL); //這句核心
CDialog::OnInitDialog();
……
……
return TRUE;  // return TRUE  unless you set the focus to a control
}
5.
在銷毀窗口之前卸載皮膚文件
我添加了WM_DESTROY消息的相應函數

void CPifuTestDlg::OnDestroy()
{

SkinH_Detach();//這句是核心
PostQuitMessage (0) ;
CDialog::OnDestroy();

// TODO: Add your message handler code here

}

6.這樣子編譯成功就能運行了,效果如下。
 
pifuTest 簡單的給MFC的對話框加上皮膚 - Love2013 - 幻想 pifuTest 簡單的給MFC的對話框加上皮膚 - Love2013 - 幻想
 
參考文章拷貝
 
網上MFC加皮膚的資料蠻多的,SDK方面的相對較少,但是原理雷同,廢話不多說了。
 
簡單說明一下過程
 
1、復制 SkinH.dll、SkinH.lib、SkinH.h 以及皮膚文件MSN.she 至工程目錄下;
 
  這里為了方便我直接把皮膚文件放到了一個文件夾中,在包含頭文件的時候注意相應的路徑就OK。
 
2、在工程中引入 .h 頭文件及 Lib 靜態庫,大家在引用的時候要注意文件的路徑;
#include "SkinH.h"
#pragma comment(lib,"SkinH.lib")
 
3、在創建窗口之前加載皮膚文件
 
 SkinH_AttachEx(("skins/MSN.she"), NULL); //這句核心
     hwnd = CreateWindow (szAppName, TEXT ("About Box Demo Program"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;
 
4、在銷毀窗口之前卸載皮膚文件
 
 case WM_DESTROY :
    SkinH_Detach();//這句是核心
          PostQuitMessage (0) ;
          return 0 ;
 
 
 
5、若文件想單獨拿走運行,需拷貝文件:SkinH.dll及 *.she 皮膚文件到程序的當前目錄中。
 
 
 
以上就是整體過程,比較簡單明了,MFC也雷同這里不在啰唆,上述用的是SKinSharp的皮膚庫,相應的皮膚庫有很多,比如國內知名的Skin++,國外收費的SkinMagic等等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM