当前位置 : 首页 » 文章分类 :  开发  »  利用AppFace美化VC程序

利用AppFace美化VC程序

http://www.appface.com 去下载AppFace的安装程序,安装好后,你会发现它的include文件夹下有个appface.h文件,lib文件夹下有appface.lib和appfaceu.lib(UNICODE版本),并且在 skins文件夹的子文件(basic和powerful)下有以.urf皮肤文件,这三(四)个文件都是我们将要用到的。
下面我讲讲怎么把它加入到我们的程序中

  • 1、首先我建立自己的程序,保证能正常运行。这里我建立名为Skin的对话框程序。

  • 2、将appface.h文件复制到MFC对话框程序的源文件文件夹下,(这里是myproject\skin\skin),同时在应用类的实现文件“工程名.cpp”或StdAfx.h中添加#include "appface.h"引用,

  • 3、现在我们要添加工程对.lib库文件的引用 ,在VC中选择project->Add to Project->File选择appface.lib和appfaceu.lib,将他添加到工程中。

  • 4、最后就是使用皮肤文件了,现在你把appface下skins\basic_urf文件夹下的*.urf皮肤文件拷贝到你的工程下的res目录下。

  • 5、现在在程序的CSkinApp::InitInstance()中添加如下函数:

    SKINSTART(_T("res\\onion_af.urf"), WINDOW_TYPE_VC, NULL, GTP_LOAD_FILE, NULL, NULL);

    添加位置在

    #ifdef _AFXDLL
      Enable3dControls();  // Call this when using MFC in a shared DLL
    #else
      Enable3dControlsStatic();   // Call this when linking to MFC statically
    #endif

    之下。
    这里是使用皮肤文件,现在运行程序就能出现美化后的程序了

  • 6、不过官方文件上说,要在上面代码的后面加上SkinRemove() 函数来清理,否则会内存泄漏:

    if (nResponse == IDOK)
    {
     // TODO: Place code here to handle when the dialog is
     // dismissed with OK
    }
    else if (nResponse == IDCANCEL)
    {
     // TODO: Place code here to handle when the dialog is
     // dismissed with Cancel
    }
    //--------------------------------------------------
    //For AppFace
    //Line 2 , cleanup
    SkinRemove();

    到这里,现在运行程序,程序是不是比原来要好看多了呀
    我这里使用的是静态链接库方法,动态的还在试,呵呵

应用类的InitInstance()函数实现的完整代码如下:

BOOL CSampleMFCApp::InitInstance()
{
    AfxEnableControlContainer();

    // Standard initialization
    // If you are not using these features and wish to reduce the size
    //  of your final executable, you should remove from the following
    //  the specific initialization routines you do not need.

    #ifdef _AFXDLL
        Enable3dControls();         // Call this when using MFC in a shared DLL
    #else
        Enable3dControlsStatic();   // Call this when linking to MFC statically
    #endif

    //--------------------------------------------------
    //For AppFace
    //Line 1  , load the skin
    SkinStart(_T("..\\..\\skins\\basic_urf\\belv_af.urf"),WINDOW_TYPE_VC,"",GTP_LOAD_FILE,NULL,NULL);
    //--------------------------------------------------

    CSampleMFCDlg dlg;
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        // TODO: Place code here to handle when the dialog is
        //  dismissed with OK
    }
    else if (nResponse == IDCANCEL)
    {
        // TODO: Place code here to handle when the dialog is
        //  dismissed with Cancel
    }

    //--------------------------------------------------
    //For AppFace
    //Line 2  , cleanup
    SkinRemove() ;
    //--------------------------------------------------

    // Since the dialog has been closed, return FALSE so that we exit the
    //  application, rather than start the application's message pump.
    return FALSE;
}

注意:

  • (1)在单文档视图类程序中,要在view类的实现文件“含对话框的单文档View.cpp”中添加#include "appface.h",在view类的初始化函数OnInitialUpdate()中加载皮肤:
    SKINSTART(_T("res\\pipe_af.urf"), WINDOW_TYPE_VC, NULL , GTP_LOAD_FILE, NULL, NULL);
    在响应WM_DESTROY的函数OnDestroy()中移除皮肤:
    SkinRemove();
  • (2)多文档视图结构中和单文档视图中相同,不过要是在视图类的OnDestroy()函数中是否皮肤的话,关闭视图时则皮肤会消失。所以目前我还不清楚该在哪里释放皮肤。

上一篇 绫辻行人《杀人暗黑馆》读后感

下一篇 最近琢磨出了个测试数据的小技巧

阅读
评论
784
阅读预计3分钟
创建日期 2012-06-16
修改日期 2017-07-15
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论