<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    SonicUI在MFC中的使用

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    SonicUI是一個GUI引擎,提供了一些簡單的UI組件實現高效率的UI效果,例如:自繪按鈕、異形窗體、動畫、超鏈接和圖像操作方法。此項目作者開源到CodeProject,地址為:http://www.codeproject.com/KB/GDI/SonicUI.aspx。下載源代碼編譯動態庫版本和靜態庫版本,在此我以Visual Studio 2008 SP1編譯,也打包到下面的下載地址里面。下面介紹下SonicUI在MFC中的使用,如果有錯誤之處,還請指出。

    RFID設備管理軟件

    1.新建一個基于對話框、使用Unicode庫的工程,工程名稱SonicUITest;
    2.復制ISonicUI.h文件到工程目錄下,添加此文件進工程;
    3.復制SonicUIUd.dll、SonicUIUd_Dll.lib和SonicUIU.lib到工程目錄下(這些是自己編譯出來的);
    4.在stdafx.h文件,添加以下代碼:

    1
    2
    3
    4
    5
    6 #include "ISonicUI.h" 
    #ifdef _DEBUG 
    #pragma comment(lib,"SonicUIUd_Dll")    //調試時用Debug動態庫 
    #endif 
    #pragma comment(lib,"SonicUIU")        //發布時用Release靜態庫(目錄下還需其他支持庫) 
    using namespace sonic_ui; 5.在對話框頭文件,添加以下代碼:

    1
    2
    3
    4 protected:     
        ISonicWndEffect* g_pEffect;            //窗口的效果引擎 
        ISonicString* g_pText[2];            //以關鍵字格式化字符串 
        void OnClose(ISonicString * pStr, LPVOID);    //委托關閉 6.在對話框構造函數,添加以下代碼:

    1
    2
    3     g_pEffect = NULL; 
        g_pText[0] = NULL; 
        g_pText[1] = NULL; 7.在對話框OnInitDialog初始化函數里,添加以下代碼:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25 BOOL CSonicUITestDlg::OnInitDialog() 

        CDialog::OnInitDialog(); 
        //…… 
        //創建ISonicWndEffect 
        g_pEffect = GetSonicUI()->CreateWndEffect(); 
     
        //把窗體句柄加到ISonicWndEffect 
        g_pEffect->Attach(m_hWnd); 
         
        //設置窗體背景顏色 
        g_pEffect->SetBkColor(RGB(255,0,255)); 
     
        //委托窗體變換之后的事件,讓其關閉窗體 
        g_pEffect->Delegate(DELEGATE_EVENT_TRANSFORM_OVER, NULL, this, &CSonicUITestDlg::OnClose);   
     
        //創建ISonicString 
        g_pText[0] = GetSonicUI()->CreateString(); 
        g_pText[1] = GetSonicUI()->CreateString(); 
     
        //格式化文字 
        g_pText[0]->Format(_T("/def/這是一段文字,使用SonicUI引擎實現")); 
        g_pText[1]->Format(_T("/c=%x, a='http://blog.csdn.net/akof1314', linkl=1, linkt='點擊'/無幻博客http:////blog.csdn.net//akof1314"), RGB(00255)); 
        return TRUE;  
    8.添加窗體變換后的委托事件代碼:

    1
    2
    3
    4 void CSonicUITestDlg::OnClose(ISonicString * pStr, LPVOID) 

        ::DestroyWindow(g_pEffect->GetSafeHwnd()); 
    9.窗體上添加3個按鈕,事件分別如下:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17 void CSonicUITestDlg::OnBnClickedMoveButton() 

        //動畫移動 
        g_pEffect->MoveGently(00); 

     
    void CSonicUITestDlg::OnBnClickedAlphaButton() 

        //設置透明度 
        g_pEffect->SetLayeredAttributes(RGB(2550255), 0, LWA_COLORKEY); 

     
    void CSonicUITestDlg::OnBnClickedAnicloseButton() 

        //變換窗體 
        g_pEffect->EnableTransform(TRUE, 0, CRect(0011), 20); 
    10.在對話框OnPaint()函數里面繪制文字,添加以下代碼:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16 void CSonicUITestDlg::OnPaint() 

        if (IsIconic()) 
        { 
            //…… 
        } 
        else 
        { 
            PAINTSTRUCT ps; 
            HDC hdc = ::BeginPaint(m_hWnd, &ps); 
            g_pText[0]->TextOut(hdc, 5050, m_hWnd); 
            g_pText[1]->TextOut(hdc, 100100, m_hWnd); 
            ::EndPaint(m_hWnd, &ps); 
            CDialog::OnPaint(); 
        } 
    11.編譯、運行程序,截圖如下:

    RFID設備管理軟件

    SonicUI對異形窗體,自繪按鈕等的支持。

    1.首先準備素材文件,一張PNG背景圖和一張PNG按鈕圖片,導入到上面工程的資源里面,VS2008會自動分辨為“PNG”資源類型名。
    再加入一張動態GIF頭像,加入到新建“IMAGE”資源類型,ID號為GIF_USERHEAD。再從“資源視圖”打開IDD_ABOUTBOX對話框,刪除默認控件,添加兩個EDIT控件,設置其屬性Border為False、Multiline為True、Want Return為True。
    2.在對話框的實現文件,類CAboutDlg里面添加以下代碼:

    1
    2
    3
    4
    5
    6
    7 protected
        ISonicString* g_pButton;    //自繪按鈕 
        ISonicImage* g_pImgButton;    //自繪按鈕圖片 
        ISonicImage* g_pImgBG;        //背景圖片 
        ISonicImage* g_pImgUserHead;    //頭像圖片 
        ISonicAnimation* g_pUserHead;    //頭像圖片動畫 
        void OnClose(ISonicString* pStr, LPVOID);    //委托關閉事件 3.重載CAboutDlg的WM_PAINT消息函數,剩下的代碼如下:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54 BOOL CAboutDlg::OnInitDialog() 

        CDialog::OnInitDialog(); 
     
        //窗口風格 
        SetWindowLong(m_hWnd, GWL_STYLE, GetWindowLong(m_hWnd, GWL_STYLE)&~(WS_CAPTION)); 
        SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE)&WS_EX_TOOLWINDOW); 
     
        //自繪按鈕 
        g_pImgButton = GetSonicUI()->CreateImage(); 
        g_pImgButton->Load(PNG_BUTTON, NULL, _T("PNG")); 
        g_pButton = GetSonicUI()->CreateString(); 
        g_pButton->Format(_T("/a, p4=%d, linkt='關閉窗體', btn_text='關閉', animation=40/"), g_pImgButton->GetObjectId()); 
        g_pButton->Delegate(DELEGATE_EVENT_CLICK, NULL, this, &CAboutDlg::OnClose); 
     
        //異形窗體 
        g_pImgBG = GetSonicUI()->CreateImage(); 
        g_pImgBG->Load(PNG_BG, NULL, _T("PNG")); 
        ISonicWndEffect* a_pEffect = GetSonicUI()->CreateWndEffect(); 
        a_pEffect->Attach(m_hWnd); 
        a_pEffect->SetBkColor(RGB(255,0,255)); 
        a_pEffect->SetLayeredAttributes(RGB(2550255), 0, LWA_COLORKEY); 
         a_pEffect->EnableWholeDrag(TRUE); 
     
        //調整位置 
        ::SetWindowPos(m_hWnd, NULL, 00, g_pImgBG->GetWidth(), g_pImgBG->GetHeight(), SWP_NOMOVE); 
        ::SetWindowPos(GetDlgItem(IDC_EDIT1)->m_hWnd, NULL, 8115401205, SWP_NOZORDER); 
        ::SetWindowPos(GetDlgItem(IDC_EDIT2)->m_hWnd, NULL, 8330401117, SWP_NOZORDER); 
         
        //動態頭像 
        g_pImgUserHead = GetSonicUI()->CreateImage(); 
        g_pImgUserHead->Load(GIF_USERHEAD); 
        ISonicString* pGif = GetSonicUI()->CreateString(); 
        pGif->Format(_T("/p=%d/"), g_pImgUserHead->GetObjectId()); 
        g_pUserHead = GetSonicUI()->CreateAnimation(); 
        g_pUserHead->Create(m_hWnd, 266, pGif->GetWidth(), pGif->GetHeight()); 
        g_pUserHead->AddObject(pGif->GetObjectId()); 
     
        return TRUE;  // return TRUE unless you set the focus to a control 

     
    void CAboutDlg::OnPaint() 

        PAINTSTRUCT ps; 
        HDC hdc = ::BeginPaint(m_hWnd, &ps);     
        g_pImgBG->Draw(hdc); 
        g_pButton->TextOut(hdc, 352456, m_hWnd); 
        ::EndPaint(m_hWnd, &ps); 

     
    void CAboutDlg::OnClose(ISonicString * pStr, LPVOID) 

        OnOK(); 
    4.編譯、運行程序,截圖如下:

    RFID設備管理軟件

    下載地址:http://download.csdn.net/source/3561699

    參考資料:

    1.SonicUI - A Convenient GUI Engine You've Never Seen  http://www.codeproject.com/KB/GDI/SonicUI.aspx
    2.讓UI開發輕松而快樂,用SonicUI引擎實現常見UI效果 http://blog.csdn.net/zskof/article/details/3496343
    3.SonicUI運行機制的粗略分析 http://blog.csdn.net/alien75/article/details/5940210

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全