返回> 网站首页 

[转载]Codejock Xtreme ToolkitPro MFC 使用

yoours2011-11-09 14:03:55 阅读 1923

简介一边听听音乐,一边写写文章。

下载地址:
Codejock Xtreme ToolkitPro MFC 15.1.3.0908    http://download.csdn.net/source/3773927

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;
}

最小使用方法:
1. 在stdafx.h文件中加入:
    #include <XTToolkitPro.h>

2. 在对话框构造函数中加入:
    XTPSkinManager()->LoadSkin(_T("Office2007.cjstyles"));

3. 动态创建的控件或者是没有自动使用皮肤的控件使用下面语句强制使用皮肤
    XTPSkinManager()->ApplyWindow(myCtrl->m_hWnd);
微信小程序扫码登陆

文章评论

1923人参与,0条评论