zoukankan      html  css  js  c++  java
  • XTP界面在Dialog里的实现

    1,确定你已经装好了XTP。
    2,修改目录:工具/选项/目录 
        include files  :  D:\Microsoft Visual Studio\Xtreme ToolkitPro v11.2.2\Source
        librarys files :  D:\Microsoft Visual Studio\Xtreme ToolkitPro v11.2.2\Lib\vc60
    3,工程/设置/C++  在工程选项里面添加:/Zm200 注意大小写。
    4,在stdAfx.h里面添加:#include <XTToolkitPro.h>
    5, 在Dialog.h文件中,Dialog定义的地方改为:
    #define CDialogSampleDlgBase CXTPDialogBase<CXTResizeDialog>
    class CCardManageDlg : public CDialogSampleDlgBase{
    public:
    。。。
    }
    6,在Dialog构造函数实现的地方改为:
    CCardManageDlg::CCardManageDlg(CWnd* pParent /*=NULL*/)
    : CDialogSampleDlgBase(CCardManageDlg::IDD, pParent)
    {。。。
    }
    7,dialog构造函数实现内,预先配置:
    XTPSkinManager()->SetApplyOptions(XTPSkinManager()->GetApplyOptions() | xtpSkinApplyMetrics);//这句必须有,
    XTPSkinManager()->LoadSkin(_T("Office2007.cjstyles"));//这句是设置一种风格,Office2007.cjstyles是风格文件名,要拷贝过来。

    8,增加变量:
    BOOL m_bInRepositionControls, m_bInitDone;
    CRect m_rcBorders;
    用于第9,10步中,重新设置组件位置和大小。

    9,在initdialog里面添加:

    VERIFY(InitCommandBars());//XTP带,预处理,不可少。

    CXTPCommandBars* pCommandBars = GetCommandBars();//CXTPCommandBars管理TOOLBAR,Menu和status.
    /***开始添加菜单***/
    pCommandBars->SetMenu(_T("Menu Bar"), IDR_MENU1);
    CXTPToolBar* pToolBar = pCommandBars->Add(_T("Standard"), xtpBarTop);
    pToolBar->LoadToolBar(IDR_MAINFRAME);

    XTPImageManager()->SetIcons(IDR_MAINFRAME);//图标

    pCommandBars->GetCommandBarsOptions()->ShowKeyboardCues(xtpKeyboardCuesShowWindowsDefault);//额外的。
    pCommandBars->GetToolTipContext()->SetStyle(xtpToolTipOffice);//额外的。
    // pCommandBars->GetShortcutManager()->SetAccelerators(IDR_ACCELERATOR);//快捷键


    LoadCommandBars(_T("CommandBars"));//XTP必须

    /****下面是为解决MENU和TOOLBAR引起的错位,通过迭代对所有子组件重拍******/
    CWnd* pwndChild = GetWindow(GW_CHILD);
    while (pwndChild)
    {     
      SetResize(pwndChild->GetDlgCtrlID(), SZ_TOP_LEFT, CXTResizePoint( 0, 0) );
    //0,0表示水平和竖直方向都不缩放。
      pwndChild = pwndChild->GetNextWindow();
    }

    m_bInitDone = TRUE;
    RepositionControls();//重设组件位置和大小,实现见10.

    m_szMin = m_szWindow;
    AutoLoadPlacement(_T("Placement"));

    10,实现RepositionControls();//重设组件位置和大小,无需看,直接复制。


    void CCardManageDlg::RepositionControls()
    {
    if (m_bInRepositionControls || !m_bInitDone)
      return;

    CRect rcClientStart;
    CRect rcClientNow;
    GetClientRect(rcClientStart);

    if ((GetStyle() & WS_MINIMIZE) || (rcClientStart.IsRectEmpty()))
      return;

    m_bInRepositionControls = TRUE;

    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0, reposQuery, rcClientNow);

    CRect rcBorders(rcClientNow.left - rcClientStart.left, rcClientNow.top - rcClientStart.top,  rcClientStart.right - rcClientNow.right,
      rcClientStart.bottom - rcClientNow.bottom);

    if (rcBorders != m_rcBorders)
    {
     
      CPoint ptOffset(rcBorders.left - m_rcBorders.left, rcBorders.top - m_rcBorders.top);
      CSize szOffset(rcBorders.left + rcBorders.right - m_rcBorders.left - m_rcBorders.right,
      rcBorders.top + rcBorders.bottom - m_rcBorders.top - m_rcBorders.bottom);
     
      CRect rcWindow;
      GetWindowRect(rcWindow);
      rcWindow.BottomRight() += szOffset;
     
      Offset(ptOffset);
      m_szWindow += szOffset;
      m_szMin += szOffset;
     
      MoveWindow(rcWindow, TRUE);
    }

    m_rcBorders = rcBorders;

    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

    m_bInRepositionControls = FALSE;
    }

    11,添加状态栏的方法:
    状态栏变量:CXTPStatusBar m_wndStatusBar;
    在ONinitdialog里面加:
    if (!m_wndStatusBar.Create(this) ||
      !m_wndStatusBar.SetIndicators(indicators,
      sizeof(indicators)/sizeof(UINT)))
    {
      TRACE0("Failed to create status bar\n");
      return -1;      // fail to create
    }
    m_wndStatusBar.SetPaneInfo(0, ID_SEPARATOR, SBPS_STRETCH, 100);
    在合适的地方调用m_wndStatusBar.SetWindowText(lpsz);即可设置显示文本

    /***下面这句有时间看看**/
    LRESULT CDialogSampleDlg::OnKickIdle(WPARAM, LPARAM)
    {
    if (GetCommandBars()) GetCommandBars()->UpdateCommandBars();
    if (m_wndStatusBar.GetSafeHwnd()) m_wndStatusBar.SendMessage(WM_IDLEUPDATECMDUI, TRUE);
    return 0;
    }

  • 相关阅读:
    JEECG开发总结
    ehcache集群的配置
    spring拦截器
    spring的基本配置
    kindeditor编辑器
    jQuery中的Ajax
    表单验证
    Python中的Random模块
    Open vSwitch FAQ (二)
    Open vSwitch FAQ (一)
  • 原文地址:https://www.cnblogs.com/aoyihuashao/p/1623692.html
Copyright © 2011-2022 走看看