日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

XTToolkitPro使用

 Sky-Cool 2012-05-08
XTToolkitPro使用
2011-04-27 6:30

XTToolkitPro使用... 1

開發(fā)環(huán)境... 2

添加SDI程序的CommandBar和MenuBar支持... 2

定制toolbars和menus的支持... 3

添加自定義的主題支持... 5

添加Docking Panes支持... 6

發(fā)現(xiàn)定義在XTPDeprecated.h中的符號,為廢棄符號,修改為新符號即可... 9

添加智能菜單支持... 9

添加自定義特性的派生控件... 9

 


Visual Studio 2008 + XTToolkitPro v11.2


1、  創(chuàng)建MFC的SDI應(yīng)用程序

2、  在stdafx.h添加

#include <XTToolkitPro.h> // Xtreme Toolkit Pro component library

3、  修改mainfrm.h的CMainFrame基類,MDI對應(yīng)為

CXTPMDIFrameWnd

class CMainFrame : public CXTPFrameWnd

4、  修改CMainFrame::OnCreate函數(shù)

    // Initialize the command bars

    if (!InitCommandBars())

        return -1;

 

    // Get a pointer to the command bars object.

    CXTPCommandBars* pCommandBars = GetCommandBars();

    if(pCommandBars == NULL)

    {

        TRACE0("Failed to create command bars object.\n");

        return -1;      // fail to create

    }

 

    // Add the menu bar

    CXTPCommandBar* pMenuBar = pCommandBars->SetMenu(

        _T("Menu Bar"), IDR_MAINFRAME);

    if(pMenuBar == NULL)

    {

        TRACE0("Failed to create menu bar.\n");

        return -1;      // fail to create

    }

 

    // Create ToolBar

    CXTPToolBar* pToolBar = (CXTPToolBar*)

        pCommandBars->Add(_T("Standard"), xtpBarTop);

    if (!pToolBar || !pToolBar->LoadToolBar(IDR_MAINFRAME))

    {

        TRACE0("Failed to create toolbar\n");

        return -1;

    }

 

    // Set Office 2003 Theme

    CXTPPaintManager::SetTheme(xtpThemeOffice2003);

注釋掉以下幾行

     //if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

     //      | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

     //      !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

     //{

     //      TRACE0("未能創(chuàng)建工具欄\n");

     //      return -1;      // 未能創(chuàng)建

     //}

     /*m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

     EnableDocking(CBRS_ALIGN_ANY);

     DockControlBar(&m_wndToolBar);*/

5、  如果需要重載CMainFrame::PreTranslateMessage和CMainFrame::OnCmdMsg,修改如下

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)

{

    // TODO: Add your specialized code here and/or call the base class

 

    return CXTPMDIFrameWnd::PreTranslateMessage(pMsg);

}

 

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode,

    void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)

{

    // TODO: Add your specialized code here and/or call the base class

 

    return CXTPMDIFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);

}

6、  編譯運行,出現(xiàn)Offiice 2003主題風(fēng)格的應(yīng)用程序

 

1、

在CMainFrm類增加響應(yīng)ON_COMMAND的消息

XTP_ID_CUSTOMIZE

支持

在mainfrm.cpp中修改

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

    //{{AFX_MSG_MAP(CMainFrame)

    ON_WM_CREATE()

    //}}AFX_MSG_MAP

    ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize)

END_MESSAGE_MAP()

在mainfrm.h中修改

    //{{AFX_MSG(CMainFrame)

    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

    //}}AFX_MSG

    afx_msg void OnCustomize();

    DECLARE_MESSAGE_MAP()

2、  在mainfrm.cpp中增加

void CMainFrame::OnCustomize()

{

    // Get a pointer to the command bars object.

    CXTPCommandBars* pCommandBars = GetCommandBars();

    if(pCommandBars != NULL)

    {

        // Instanciate the customize dialog object.

        CXTPCustomizeSheet dlg(pCommandBars);

 

        // Add the options page to the customize dialog.

        CXTPCustomizeOptionsPage pageOptions(&dlg);

        dlg.AddPage(&pageOptions);

 

        // Add the commands page to the customize dialog.

        CXTPCustomizeCommandsPage* pCommands = dlg.GetCommandsPage();

        pCommands->AddCategories(IDR_MDISAMTYPE);

 

        // Use the command bar manager to initialize the

        // customize dialog.

        pCommands->InsertAllCommandsCategory();

        pCommands->InsertBuiltInMenus(IDR_MDISAMTYPE);

        pCommands->InsertNewMenuCategory();

 

        // Dispaly the dialog.

        dlg.DoModal();

    }

}

3、  添加CMainFrm類的對commandbar和menubar的定制配置序列化支持

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

    ...

 

    // Load the previous state for toolbars and menus.

    LoadCommandBars(_T("CommandBars"));

 

    return 0;

}

void CMainFrame::OnClose()

{

    // Save the current state for toolbars and menus.

    SaveCommandBars(_T("CommandBars"));

    CMDIFrameWnd::OnClose();

}

4、  資源包含,查看rc2資源文件代碼,添加xttoolkitpro.rc,在資源附加目錄中添加xttoolkitpro.rc所在目錄

5、  編譯運行,發(fā)現(xiàn)定制化工具欄和菜單的資源沒有加載進來,如圖標、字符串等,解決方法是修改字符資源語言為英文(這里編譯的是英文資源的lib庫,根據(jù)自己需要也可以編譯中文資源的lib庫)


1、  選擇父主題類,如

CXTPDefaultTheme to inherit Office 2000 theme

CXTPOfficeTheme to inherit Office XP theme

CXTPOffice2003Theme to inherit Office 2003 theme

CXTPNativeXPTheme to inherit Native XP theme

2、  實現(xiàn)自定義主題類的接口,接口函數(shù)為DrawCommandBarGripper

class CDoubleGripperTheme : public CXTPDefaultTheme

{

    virtual CSize DrawCommandBarGripper(

        CDC* pDC, CXTPCommandBar* pBar, BOOL bDraw);

};

 

// DrawCommandBarGripper function.

// if bDraw if FALSE must return gripper size.

// if bDraw is TRUE must draw gripper.

CSize CDoubleGripperTheme::DrawCommandBarGripper(CDC* pDC,

    CXTPCommandBar* pBar, BOOL bDraw)

{

    // If Toolbar is vertical docked

    if (pBar->GetPosition() == xtpBarRight ||

        pBar->GetPosition() == xtpBarLeft)

    {

        if (bDraw)

        {

            CXTPClientRect rc(pBar);

            Draw3dRect(pDC, CRect(3, 3, rc.right - 3, 6),

                COLOR_BTNHILIGHT, COLOR_3DSHADOW);

            Draw3dRect(pDC, CRect(3, 7, rc.right - 3, 10),

                COLOR_BTNHILIGHT, COLOR_3DSHADOW);

        }

        return CSize(0, 10);

    }

    // if Toolbar is horizontal  docked

    else

    if (pBar->GetPosition() == xtpBarTop ||

        pBar->GetPosition() == xtpBarBottom)

    {

        CXTPClientRect rc(pBar);

        if (bDraw)

        {

            Draw3dRect(pDC, CRect(3, 3, 6, rc.bottom - 3),

                COLOR_BTNHILIGHT, COLOR_3DSHADOW);

            Draw3dRect(pDC, CRect(7, 3, 10, rc.bottom - 3),

                COLOR_BTNHILIGHT, COLOR_3DSHADOW);

        }

        return CSize(10, 0);

    }

    else return CXTPDefaultTheme::DrawCommandBarGripper(pDC, pBar, bDraw);

}

3、  運行查看效果

支持

1、  在CMainFrame類中添加CXTPDockingPaneManager成員

// Attributes

public:

    CXTPDockingPaneManager m_paneManager;

2、  添加字符串資源

IDR_PANE_OPTIONS       61446    Options

IDR_PANE_PROPERTIES    61447    Properties

3、  在CMainFrame::OnCreate中添加

// Initialize the docking pane manager and set the

// initial them for the docking panes.  Do this only after all

// control bars objects have been created and docked.

m_paneManager.InstallDockingPanes(this);

m_paneManager.SetTheme(xtpPaneThemeOffice);

 

// Create docking panes.

CXTPDockingPane* pwndPane1 = m_paneManager.CreatePane(

    IDR_PANE_OPTIONS, CRect(0, 0,200, 120), dockLeftOf);

CXTPDockingPane* pwndPane2 = m_paneManager.CreatePane(

    IDR_PANE_PROPERTIES, CRect(0, 0,200, 120), dockBottomOf, pwndPane1)

4、  運行查看Docking Panes效果

5、  綁定窗口控件類到Docking Panes中

6、  添加CMainFrame的窗口控件成員

// Attributes

public:

    CStatic m_wndOptions;

    CEdit m_wndProperties;

7、  添加OnDockingPaneNotify函數(shù)處理,綁定窗口控件成員到Docking Panes上

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

    //{{AFX_MSG_MAP(CMainFrame)

    ON_WM_CREATE()

    //}}AFX_MSG_MAP

    ON_MESSAGE(XTPWM_DOCKINGPANE_NOTIFY, OnDockingPaneNotify)

END_MESSAGE_MAP()

 

LRESULT CMainFrame::OnDockingPaneNotify(WPARAM wParam, LPARAM lParam)

{

    if (wParam == XTP_DPN_SHOWWINDOW)

    {

        CXTPDockingPane* pPane = (CXTPDockingPane*)lParam;

 

        if (!pPane->IsValid())

        {

            switch (pPane->GetID())

            {

            case IDR_PANE_PROPERTIES:

                {

                    if (m_wndProperties.GetSafeHwnd() == 0)

                    {

                        m_wndProperties.Create(WS_CHILD|

                            ES_AUTOVSCROLL|ES_MULTILINE,

                            CRect(0, 0, 0, 0), this, 0);

                    }

                    pPane->Attach(&m_wndProperties);

                    break;

                }

            case IDR_PANE_OPTIONS:

                {

                    if (m_wndOptions.GetSafeHwnd() == 0)

                    {

                        m_wndOptions.Create(_T("\n\nOptions"),

                            WS_CHILD|WS_CLIPCHILDREN|

                            WS_CLIPSIBLINGS|SS_CENTER,

                            CRect(0, 0, 0, 0), this, 0);

                    }

                    pPane->Attach(&m_wndOptions);

                    break;

                }

            }

        }

        return TRUE;

    }

    return FALSE;

}

8、  添加Bitmap圖片資源,2個圖標大小33x15

9、  添加CMainFrame::OnCreate中

int nIDIcons[] = {IDR_PANE_OPTIONS, IDR_PANE_PROPERTIES};

    m_paneManager.SetIcons(IDB_BITMAP_ICONS, nIDIcons,

_countof(nIDIcons), RGB(0, 255, 0));

10、              添加Docking Panes的序列化支持

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

    ...

 

    // Load the previous state for docking panes.

    CXTPDockingPaneLayout layoutNormal(&m_paneManager);

    if (layoutNormal.Load(_T("NormalLayout")))

    {

        m_paneManager.SetLayout(&layoutNormal);

    }

    return 0;

}

void CMainFrame::OnClose()

{

    // Save the current state for docking panes.

    CXTPDockingPaneLayout layoutNormal(&m_paneManager);

    m_paneManager.GetLayout(&layoutNormal);

    layoutNormal.Save(_T("NormalLayout"));

    CMDIFrameWnd::OnClose();

}

11、              運行查看帶圖標的Docking Panes效果

 

1、  定義想隱藏的菜單ID數(shù)組

static UINT uHideCmds[] =

{

    ID_FILE_PRINT, ID_FILE_PRINT_PREVIEW, ID_WINDOW_CASCADE

};

2、  在CMainFrame::OnCreate中添加

// Hide array of commands

pCommandBars->HideCommands(uHideCmds, _countof(uHideCmds));

 

// Set "Always Show Full Menus" option to the FALSE

XTP_COMMANDBARS_OPTIONS* pOptions = pCommandBars->GetCommandBarsOptions();

pOptions->bAlwaysShowFullMenus = FALSE;

3、  運行查看結(jié)果


1、  派生控件繼承自CXTPControlButton, CXTPControlPopup, CXTPControlComboBox, CXTPControlEdit,例如派生ComboBox實現(xiàn)輸入字符自動更新為大寫,ComboBox內(nèi)嵌了ComboBoxEditCtrl,重載OnChar實現(xiàn)自動更新

2、  重載實現(xiàn)CXTPControlComboBoxEditCtrl的OnChar成員

class CControlComboBoxEditEx : public CXTPControlComboBoxEditCtrl

{

public:

    afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);

 

    DECLARE_MESSAGE_MAP()

};

 

BEGIN_MESSAGE_MAP(CControlComboBoxEditEx, CXTPControlComboBoxEditCtrl)

    ON_WM_CHAR()

END_MESSAGE_MAP()

 

void CControlComboBoxEditEx::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{

    CString strChar((TCHAR)nChar), strUpper((TCHAR)nChar);

    strUpper.MakeUpper();

 

    if (strChar != strUpper) ReplaceSel(strUpper, TRUE);

    else CXTPControlComboBoxEditCtrl::OnChar(nChar, nRepCnt, nFlags);

}

3、  重載實現(xiàn)CControlComboBoxEx的CreateEditControl成員

class CControlComboBoxEx: public CXTPControlComboBox

{

    DECLARE_XTP_CONTROL(CControlComboBoxEx)

public:

    CXTPControlComboBoxEditCtrl* CreateEditControl()

    {

        return new CControlComboBoxEditEx();

    }

};

 

IMPLEMENT_XTP_CONTROL(CControlComboBoxEx, CXTPControlComboBox)

4、  增加CControlComboBoxEx新成員對內(nèi)嵌CXTPControlComboBoxEditCtrl進行數(shù)據(jù)交換操作

class CControlComboBoxEx: public CXTPControlComboBox

{

...

 

protected:

    void Copy(CXTPControl* pControl, BOOL bRecursive = FALSE);

    virtual void DoPropExchange(CXTPPropExchange* pPX);

 

protected:

    CString m_strMask;

};

 

void CControlComboBoxEx::Copy(CXTPControl* pControl, BOOL bRecursive)

{

    ASSERT_KINDOF(CControlComboBoxEx, pControl);

 

    m_strMask = ((CControlComboBoxEx*)pControl)->m_strMask;

 

    CXTPControlComboBox::Copy(pControl, bRecursive);

}

 

void CControlComboBoxEx::DoPropExchange(CXTPPropExchange* pPX)

{

    CXTPControlComboBox::DoPropExchangepPX);

 

    PX_String(pPX, _T("Mask"), m_strMask);

}

5、  在CMainFrame類的OnCreateControl成員里面添加CControlComboBoxEx控件,資源ID為ID_POPUP_COMBO

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

    ON_XTP_CREATECONTROL()

END_MESSAGE_MAP()

 

int CMainFrame::OnCreateControl(LPCREATECONTROLSTRUCT lpCreateControl)

{

    if (lpCreateControl->nID == ID_POPUP_COMBO)

    {

        CXTPControlComboBox* pComboFind = (CXTPControlComboBox*)CControlComboBoxEx::CreateObject();

        pComboFind->SetDropDownListStyle();

        pComboFind->SetFlags(xtpFlagManualUpdate);

 

        lpCreateControl->pControl = pComboFind;

        return TRUE;

    }

    return FALSE;

}

6、  運行成員檢查結(jié)果

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多