zoukankan      html  css  js  c++  java
  • [MFC美化] SkinMagic使用详解1- SkinMagic使用流程

    【SkinMagic使用流程】

    1.工程配置SkinMagic相关文件

    2.初始化SkinMagic皮肤文件,窗体加载皮肤

    3.释放皮肤资源

    特别声明,SkinMagic要是破解版的,如果不是,可能需要先破解!

    1.工程配置SkinMagic相关文件

     在给窗体或对话框加载皮肤的时候首先要把使用SkinMagic所用到的相关Dll、.h文件、Lib包含到工程目录下:

      SkinMagicLib.h :放到工程的根目录

         SkinMagic.lib :放到工程的根目录或者放到其他目录,后者需要工程添加现有项,添加进资源文件

       SkinMagic.dll :放到debug调试目录

    最后把相关的.smf皮肤文件放置到根目录,例如根目录的SkinMagic文件夹下。路径:SkinMagic/corona.smf。

    以下版本的编译出来的程序运行时不再依赖SkinMagic.dll

    SkinMagicLibMD6.lib 静态链接库,用于VC6的Release版编译

    SkinMagicLibMT6.lib 静态链接库,用于VC6的Debug版编译

    2.初始化SkinMagic皮肤文件,窗体加载皮肤

    步骤如下:

    1.在工程的stdafx.h里加载SkinMagicLib.h和SkinMagic.lib,尽量放在最后include,防止报错

    #include "SkinMagicLib.h"
    #pragma comment(lib,"SkinMagic")//也可以在依赖项里面设置

    或者:

    1、将SkinMagic.dll放置在调试目录
    2、设置库文件目录,在项目[链接器]的[附加依赖项]中加入库SkinMagic.lib
    3、在项目的stdafx.h文件中加入头文件 #include "SkinMagicLib.h"

    2.初始化SkinMagic库

    要使用SkinMagic,这一步必不可少。在App(应用程序)类的InitInstance()函数创建主窗口之前,添加初始化SkinMagic资源的代码。

    InitCommonControlsEx(&InitCtrls);  
    //
    初始化皮肤库,关键在第一个要获取实例句柄。其他可为NULL。 VERIFY(1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));

    对话框:

    InitCommonControlsEx(&InitCtrls);在这之后添加

    单文档:

    在ClassView中找到CxxxAPP类.然后找到InitInstance()函数,然后在

    m_pMainWnd->ShowWindow(SW_SHOW);

    m_pMainWnd->UpdateWindow();在这之前添加

    说明:
    int InitSkinMagicLib( //初始化SkinMagic工具库
    HINSTANCE hInstance, //应用程序句柄
    char* szApplication , //皮肤文件中定义的应用程序名,置为NULL即可
       char* szRegCode, //SkinMagic的使用注册码。若无置为NULL
    char* szReserved2 //保留位,为NULL
    );

    3.加载皮肤文件。

    可以在App(应用程序)类的InitInstance()函数中也可以在Dialog的OnInitDialog()中加载。

    加载分两种:(1)添加皮肤文件到资源中,并编译到程序中。

          (2)程序在运行时动态加载皮肤文件。

    静态加载:比如添加corona.smf,设置资源类型为"SKINMAGIC",  资源ID为IDR_SKIN_CORONA,

    注意:可能会报IDR_SKIN_CORONA为未声明的标识符,这时需要添加头文件”Resource.h“

     VERIFY(1 == LoadSkinFromResource(NULL, (LPSTR)IDR_SKIN_CORONA, "SKINMAGIC"));

    动态加载:比如根目录下SkinMagic文件夹。路径:SkinMagic/corona.smf。

     VERIFY(1 == LoadSkinFile("SkinMagic/corona.smf"));

    说明:

    //资源名称带有双引号
    int LoadSkinFromResource(
    HMODULE hModule, //包含皮肤文件的模块句柄,若NULL表面在本模块中
    char* lpSkinName , //皮肤资源的名称
    char* lpType); //资源的类型

    4.为窗口添加皮肤:

    1)为标准窗口(拥有标题栏、系统菜单、可变大小等特征,比如文档/视图结构和有菜单的对话框)添加皮肤,通常用于主窗口.

    在应用程序类的InitInstance()函数的底部加入如下代码

    VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();

    说明:
    int SetWindowSkin(
    HWND hWnd, //要使用皮肤的窗口句柄
    char* lpSkinName //为skinFrameWnd对象指定的名称
    );

    2)为对话框添加皮肤
    在对话框显示之前调用,通常在应用程序初始化函数中调用.

    CNetworkDlg dlg;   
    m_pMainWnd = &dlg;  
    
    VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" )); 
    VERIFY( 1 == SetDialogSkin( "Dialog" ) );
    
    INT_PTR nResponse = dlg.DoModal();  

    说明:

    int SetDialogSkin( 
    char* lpSkinName //为skinFrameWnd对象指定的名称
    );
    使用该函数后,以后程序创建的对话框都将使用该皮肤,但对话框大小不可变。

    3)为单个对话框窗口添加皮肤

    例如在对话框视图中:重载对话框视图的创建函数OnCreate,加入如下代码:

    VERIFY( 1 == SetSingleDialogSkin( m_hWnd, "Dialog" ) );
    EnableWindowScrollbarSkin( m_hWnd , SB_BOTH );

    说明:
    int SetSingleDialogSkin(
    HWND hWnd, //要使用皮肤的窗口句柄
    char* lpSkinName //为skinFrameWnd对象指定的名称
    );
    int EnableWindowScrollbarSkin( //为滚动条添加皮肤
    HWND hWnd, //要使用皮肤的窗口句柄
    int* fnBar //要使用皮肤的滚动条,SB_BOTH表明是横竖都是用皮肤
    );

    3.释放皮肤资源

    在App(应用程序)类中重载应用程序的ExitInstance()函数,

    可仿照InitInstance()手动添加,也可在CxxxAPP类中,右键选AddVirtualFunction,然后添加ExitInstance()函数,在其中加入:

    //释放SkinMagic资源
    ExitSkinMagicLib();

     建议:

    1. 在App类中InitInstance函数中先初始化一下Skinamgic,然后加载皮肤库:

    VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), _T("SCRIBBLE") , NULL, NULL ) );//初始化SkinMagic  

    VERIFY( 1 == LoadSkinFile(_TEXT("AlphaOS.smf")));//加载皮肤文件

    然后在Dlg类中的OnInitDialog换肤:

     SetDialogSkin(_T("Dialog")));  

    附件:见文件

    有关链接:

    http://blog.csdn.net/colinchan/article/details/1572182

    http://www.cnblogs.com/tianlangshu/archive/2011/03/20/1989436.html

    http://blog.csdn.net/nonecode/article/details/7951975

  • 相关阅读:
    vue Bus总线
    一百个灯泡排成一排,第一轮将所有灯泡打开;
    大数相乘 java
    最长公共子子串 java
    剑指XX游戏(六)
    C++面试出现频率最高的30道题目
    C++ 容器及选用总结
    C++中的各种容器实现原理
    求1000阶乘中最后0的个数
    n个骰子可能的点数和
  • 原文地址:https://www.cnblogs.com/zwh0214/p/6095640.html
Copyright © 2011-2022 走看看