MainFrm.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:21k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "CommonControls.h"
  22. #include "MainFrm.h"
  23. #ifdef _DEBUG
  24. #define new DEBUG_NEW
  25. #undef THIS_FILE
  26. static char THIS_FILE[] = __FILE__;
  27. #endif
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CMainFrame
  30. IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
  31. BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
  32. //{{AFX_MSG_MAP(CMainFrame)
  33. ON_WM_CREATE()
  34. ON_WM_HSCROLL()
  35. ON_WM_CLOSE()
  36. //}}AFX_MSG_MAP
  37. ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize)
  38. ON_XTP_CREATECONTROL()
  39. ON_UPDATE_COMMAND_UI(ID_BUTTON_DOC, OnUpdateButtonDoc)
  40. END_MESSAGE_MAP()
  41. static UINT indicators[] =
  42. {
  43. ID_SEPARATOR,           // status line indicator
  44. ID_INDICATOR_CAPS,
  45. ID_INDICATOR_NUM,
  46. ID_INDICATOR_SCRL,
  47. };
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CMainFrame construction/destruction
  50. CMainFrame::CMainFrame()
  51. {
  52. LOGFONT lfIcon;
  53. VERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(lfIcon), &lfIcon, 0));
  54. VERIFY(m_fontIcon.CreateFontIndirect(&lfIcon));
  55. }
  56. CMainFrame::~CMainFrame()
  57. {
  58. }
  59. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  60. {
  61. if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
  62. return -1;
  63. // Create Status bar.
  64. // Important: All control bars including the Status Bar
  65. // must be created before the CommandBars....
  66. if (!m_wndStatusBar.Create(this) ||
  67. !m_wndStatusBar.SetIndicators(indicators,
  68. sizeof(indicators)/sizeof(UINT)))
  69. {
  70. TRACE0("Failed to create status barn");
  71. return -1;      // fail to create
  72. }
  73. // Initialize the command bars
  74. if (!InitCommandBars())
  75. return -1;
  76. // Get a pointer to the command bars object.
  77. CXTPCommandBars* pCommandBars = GetCommandBars();
  78. if(pCommandBars == NULL)
  79. {
  80. TRACE0("Failed to create command bars object.n");
  81. return -1;      // fail to create
  82. }
  83. // Add the menu bar
  84. CXTPCommandBar* pMenuBar = pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME);
  85. if(pMenuBar == NULL)
  86. {
  87. TRACE0("Failed to create menu bar.n");
  88. return -1;      // fail to create
  89. }
  90. // Create ToolBar
  91. CXTPToolBar* pToolBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop);
  92. if (!pToolBar || !pToolBar->LoadToolBar(IDR_MAINFRAME))
  93. {
  94. TRACE0("Failed to create toolbarn");
  95. return -1;
  96. }
  97. // Create the AnimationBar
  98. CXTPToolBar* pAnimationBar = (CXTPToolBar*)pCommandBars->Add(_T("Animation Bar"), xtpBarTop);
  99. if (!pAnimationBar || !pAnimationBar->LoadToolBar(IDR_ANIMATIONBAR))
  100. {
  101. TRACE0("Failed to create toolbarn");
  102. return -1;
  103. }
  104. // Dock the AnimationBar to the right of the standard toolbar
  105. DockRightOf(pAnimationBar, pToolBar);
  106. // Create the SliderBar
  107. CXTPToolBar* pSliderBar = (CXTPToolBar*)pCommandBars->Add(_T("Slider Bar"), xtpBarTop);
  108. if (!pSliderBar || !pSliderBar->LoadToolBar(IDR_SLIDERBAR))
  109. {
  110. TRACE0("Failed to create toolbarn");
  111. return -1;
  112. }
  113. // Create the OptionsBar
  114. CXTPToolBar* pOptionsBar = (CXTPToolBar*)pCommandBars->Add(_T("Options Bar"), xtpBarTop);
  115. if (!pOptionsBar || !pOptionsBar->LoadToolBar(IDR_OPTIONSBAR))
  116. {
  117. TRACE0("Failed to create toolbarn");
  118. return -1;
  119. }
  120. // Dock the OptionsBar to the right of the SliderBar
  121. DockRightOf(pOptionsBar, pSliderBar);
  122. // Create the StaticBar
  123. CXTPToolBar* pStaticBar = (CXTPToolBar*)pCommandBars->Add(_T("Static Bar"), xtpBarTop);
  124. if (!pStaticBar || !pStaticBar->LoadToolBar(IDR_STATICBAR))
  125. {
  126. TRACE0("Failed to create toolbarn");
  127. return -1;
  128. }
  129. // Dock the StaticBar to the right of the OptionsBar
  130. DockRightOf(pStaticBar, pOptionsBar);
  131. // Load the previous state for command bars.
  132. LoadCommandBars(_T("CommandBars"));
  133. return 0;
  134. }
  135. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  136. {
  137. if( !CMDIFrameWnd::PreCreateWindow(cs) )
  138. return FALSE;
  139. cs.lpszClass = _T("XTPMainFrame");
  140. CXTPDrawHelpers::RegisterWndClass(AfxGetInstanceHandle(), cs.lpszClass, 
  141. CS_DBLCLKS, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  142. return TRUE;
  143. }
  144. /////////////////////////////////////////////////////////////////////////////
  145. // CMainFrame diagnostics
  146. #ifdef _DEBUG
  147. void CMainFrame::AssertValid() const
  148. {
  149. CMDIFrameWnd::AssertValid();
  150. }
  151. void CMainFrame::Dump(CDumpContext& dc) const
  152. {
  153. CMDIFrameWnd::Dump(dc);
  154. }
  155. #endif //_DEBUG
  156. /////////////////////////////////////////////////////////////////////////////
  157. // CMainFrame message handlers
  158. int CMainFrame::OnCreateControl(LPCREATECONTROLSTRUCT lpCreateControl)
  159. {
  160. // This function is called by the Extreme Tool Kit application framework.
  161. // This function handles the creation of the controls that are placed
  162. // on the CommandBars.  The LPCREATECONTROLSTRUCT structure contains information
  163. // about the control to create.
  164. #if _MSC_VER >= 1200 || defined (_XTP_INCLUDE_CONTROLS)
  165. // Create the Calendar control
  166. if (lpCreateControl->nID == IDC_CALENDAR)
  167. {
  168. // Create the calendar control.
  169. // Note: The control does not use the DTS_UPDOWN style.
  170. // DTP controls that do not use the DTS_UPDOWN style display
  171. // an arrow button. If the user clicks this button, a month
  172. // calendar control drops down. The user can select a specific
  173. // date by clicking an area of the calendar.
  174. if (!m_monthCal.Create(WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_BORDER | DTS_SHORTDATEFORMAT,
  175. CRect(0, 0, 200, 22), this, IDC_CALENDAR))
  176. {
  177. return FALSE;
  178. }
  179. // Use m_monthCal to create a new CXTPControlCustom* control.
  180. CXTPControlCustom* pControlMonthCal = CXTPControlCustom::CreateControlCustom(&m_monthCal);
  181. // Set the xtpFlagManualUpdate flag.
  182. // Without this flag you must call the Enable member of
  183. // CCmdUI in the ON_UPDATE_COMMAND_UI handler.
  184. pControlMonthCal->SetFlags(xtpFlagManualUpdate);
  185. lpCreateControl->pControl = pControlMonthCal;
  186. return TRUE;
  187. }
  188. // Create the Date control
  189. if (lpCreateControl->nID == IDC_DATE)
  190. {
  191. // Create the date control.
  192. // Note: This control is created using the DTS_UPDOWN style.
  193. // The DTS_UPDOWN style creates a control with a spin control
  194. // positioned on the right side of the Date control.
  195. if (!m_date.Create(WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_BORDER | DTS_UPDOWN,
  196. CRect(0, 0, 100, 22), this, IDC_DATE))
  197. {
  198. return FALSE;
  199. }
  200. // Create a new CXTPControlCustom* control from the m_date control.
  201. CXTPControlCustom* pControlDate = CXTPControlCustom::CreateControlCustom(&m_date);
  202. // Set the xtpFlagManualUpdate flag.
  203. // Without this flag you must call the Enable member
  204. // of CCmdUI in the ON_UPDATE_COMMAND_UI handler.
  205. pControlDate->SetFlags(xtpFlagManualUpdate);
  206. lpCreateControl->pControl = pControlDate;
  207. return TRUE;
  208. }
  209. // Create the Time control
  210. if (lpCreateControl->nID == IDC_TIME)
  211. {
  212. // Create the date control.
  213. // Note: This control is created using the DTS_UPDOWN style.
  214. // The DTS_UPDOWN style creates a control with a spin control
  215. // positioned on the right side of the Time control.
  216. if (!m_time.Create(WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_BORDER | DTS_UPDOWN,
  217. CRect(0, 0, 90, 22), this, IDC_TIME))
  218. {
  219. return FALSE;
  220. }
  221. // Set the format of the Time control.
  222. m_time.SetFormat(_T("hh':'mm':'ss tt"));
  223. // Create a CXTPControlCustom* from the m_time control.
  224. CXTPControlCustom* pControlTime = CXTPControlCustom::CreateControlCustom(&m_time);
  225. // Set the xtpFlagManualUpdate flag.
  226. // Without this flag you must call the Enable member
  227. // of CCmdUI in the ON_UPDATE_COMMAND_UI handler.
  228. pControlTime->SetFlags(xtpFlagManualUpdate);
  229. lpCreateControl->pControl = pControlTime;
  230. return TRUE;
  231. }
  232. #endif
  233. // Create the Animation control
  234. if (lpCreateControl->nID == IDC_ANIMATION)
  235. {
  236. // Create the Animation control.
  237. if (!m_wndAnimCtrl.Create(WS_TABSTOP | WS_CHILD | WS_VISIBLE | ACS_AUTOPLAY,
  238. CRect(0, 0, 0, 0), this, IDC_ANIMATION))
  239. {
  240. return FALSE;
  241. }
  242. // Open the HeartBeat avi that is associated with the IDR_HEARTBEAT string resource.
  243. m_wndAnimCtrl.Open(IDR_HEARTBEAT);
  244. // Create a CXTPControlCustom* control from the m_wndAnimCtrl control.
  245. CXTPControlCustom* pControlAnimation = CXTPControlCustom::CreateControlCustom(&m_wndAnimCtrl);
  246. // Set the margins of the Animation control.
  247. pControlAnimation->SetBorders(3, 3, 3, 3);
  248. // Set the vertical draw options to xtpVerticalShow.
  249. // This will draw the animation control when the Animation
  250. // toolbar is docked vertically.
  251. pControlAnimation->SetVerticalPositionOption(xtpVerticalShow);
  252. lpCreateControl->pControl = pControlAnimation;
  253. return TRUE;
  254. }
  255. // Create the Slider control
  256. if (lpCreateControl->nID == IDC_SLIDER)
  257. {
  258. // Create the Slider control
  259. if (!m_wndSlider.Create(TBS_HORZ | WS_CHILD | WS_VISIBLE,
  260. CRect(0, 0, 200, 16), this, IDC_SLIDER))
  261. {
  262. return FALSE;
  263. }
  264. // Set the maximum range of the Slider control's scroll bar.
  265. m_wndSlider.SetRangeMax(0xFF);
  266. // Create a CXTPControlCustom* from the m_wndSlider control.
  267. CXTPControlCustom* pControlSlider = CXTPControlCustom::CreateControlCustom(&m_wndSlider);
  268. // Set the margins of the Slider control.
  269. pControlSlider->SetBorders(3, 3, 3, 3);
  270. // Set the vertical draw options to xtpVerticalButton.
  271. // This will show a button in place of the Slider control
  272. // when the Slider control toolbar is docked vertically.
  273. pControlSlider->SetVerticalPositionOption(xtpVerticalButton);
  274. lpCreateControl->pControl = pControlSlider;
  275. return TRUE;
  276. }
  277. // Create the Option radio button
  278. if (lpCreateControl->nID >= IDC_OPTION_HIDE && lpCreateControl->nID <= IDC_OPTION_BUTTON)
  279. {
  280. // Get the ID of the control currently being created
  281. UINT nID = lpCreateControl->nID;
  282. // Determine the index of the control
  283. CButton& wndOption = m_wndOptions[nID - IDC_OPTION_HIDE];
  284. // Create the Options radio button
  285. if (!wndOption.Create(NULL, WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
  286. CRect(0, 0, 100, 20), this, nID))
  287. {
  288. return FALSE;
  289. }
  290. // Use the radio button to create a CXTPControlCustom* control
  291. CXTPControlCustom* pControlOption = CXTPControlCustom::CreateControlCustom(&wndOption);
  292. // Set the ID of the custom control to the ID of the radio button
  293. pControlOption->SetID(nID);
  294. // Set the window text to the string resource associated with the button ID
  295. wndOption.SetWindowText(pControlOption->GetCaption());
  296. // Set the font of the radio button
  297. wndOption.SetFont(&m_fontIcon);
  298. // Check the first radio button on the Options toolbar.
  299. wndOption.SetCheck(nID == IDC_OPTION_HIDE);
  300. // Set the vertical draw option to hide when the Option toolbar is drawn vertically.
  301. pControlOption->SetVerticalPositionOption(xtpVerticalHide);
  302. // Set the xtpFlagManualUpdate flag.
  303. // Without this flag you must call the Enable member of
  304. // CCmdUI in the ON_UPDATE_COMMAND_UI handler.
  305. pControlOption->SetFlags(xtpFlagManualUpdate);
  306. lpCreateControl->pControl = pControlOption;
  307. return TRUE;
  308. }
  309. // Create the Static control
  310. if (lpCreateControl->nID == ID_BUTTON_DOC)
  311. {
  312. CXTPControl* pControlStatic = new CControlStatic();
  313. lpCreateControl->pControl = pControlStatic;
  314. return TRUE;
  315. }
  316. return FALSE;
  317. }
  318. void CMainFrame::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  319. {
  320. // This  member function is called when the Slider control is scrolled.
  321. // Determine if the WM_HSCROLL message is from the Slider control's scroll bar.
  322. if ((CSliderCtrl*)pScrollBar == &m_wndSlider)
  323. {
  324. CMDIChildWnd* pChild = MDIGetActive(); // Get the active child window.
  325. if (pChild)
  326. {
  327. // Send a WM_HSCROLL message to the active child window.
  328. pChild->GetActiveView()->SendMessage(WM_HSCROLL, 0, (LPARAM)m_wndSlider.GetSafeHwnd());
  329. }
  330. }
  331. // Let the base class handle the message.
  332. CMDIFrameWnd::OnHScroll(nSBCode, nPos, pScrollBar);
  333. }
  334. void CMainFrame::OnUpdateButtonDoc(CCmdUI* pCmdUI)
  335. {
  336. // This is the Command UI handler function for the Static control.
  337. // Use the DYNAMIC_DOWNCAST macro to cast the CWnd* pCmdUI->m_pOther to a CXTPCommandBar* object.
  338. CXTPCommandBar* pCommandBar = DYNAMIC_DOWNCAST(CXTPCommandBar, pCmdUI->m_pOther);
  339. if (!pCommandBar)
  340. return;
  341. // Use the DYNAMIC_DOWNCAST macro to cast the CXTPControl* object to a CControlStatic* object.
  342. CControlStatic* pControl = DYNAMIC_DOWNCAST(CControlStatic, pCommandBar->GetControl(pCmdUI->m_nIndex));
  343. if (!pControl)
  344. return;
  345. // nCount is used to count the number of open child windows.
  346. int nCount = 0;
  347. // Get a pointer to the first child window.
  348. CWnd* pWnd = CWnd::FromHandle(m_hWndMDIClient)->GetWindow(GW_CHILD);
  349. while (pWnd)
  350. {
  351. nCount ++;
  352. pWnd = pWnd->GetWindow(GW_HWNDNEXT); // Returns the next window on the window manager's list.
  353. }
  354. // Create the string caption for the Static control
  355. CString strCaption;
  356. strCaption.Format(_T("Opened Documents: %i"), nCount);
  357. // Set the caption on the Static control
  358. pControl->SetCaption(strCaption);
  359. // Enable the Static control if the number of child windows is greater than 0.
  360. pCmdUI->Enable(nCount > 0);
  361. }
  362. void CMainFrame::OnClose()
  363. {
  364. // Save the current state for command bars.
  365. SaveCommandBars(_T("CommandBars"));
  366. // TODO: Add your message handler code here and/or call default
  367. CMDIFrameWnd::OnClose();
  368. }
  369. void CMainFrame::OnCustomize()
  370. {
  371. // Get a pointer to the command bars object.
  372. CXTPCommandBars* pCommandBars = GetCommandBars();
  373. if (pCommandBars == NULL)
  374. return;
  375. // Instantiate the customize dialog
  376. CXTPCustomizeSheet dlg(pCommandBars);
  377. // Add the options page to the customize dialog.
  378. CXTPCustomizeOptionsPage pageOptions(&dlg);
  379. dlg.AddPage(&pageOptions);
  380. // Add the commands page to the customize dialog.
  381. CXTPCustomizeCommandsPage* pPageCommands = dlg.GetCommandsPage();
  382. pPageCommands->AddCategories(IDR_COMMONCTYPE);
  383. // Initialize the commands page page.
  384. pPageCommands->InsertAllCommandsCategory();
  385. pPageCommands->InsertBuiltInMenus(IDR_COMMONCTYPE);
  386. pPageCommands->InsertNewMenuCategory();
  387. // Display the customize dialog.
  388. dlg.DoModal();
  389. }
  390. ///////////////////////////////////////////////////////////////////
  391. // CControlStatic
  392. IMPLEMENT_XTP_CONTROL(CControlStatic, CXTPControl)
  393. CSize CControlStatic::GetSize(CDC* pDC)
  394. {
  395. // This function is used to determine the size
  396. // of the bounding rectangle of the text.  The
  397. // function returns the size of the rectangle in
  398. // a CSize object.
  399. // Determine if the toolbar is docked horizontally or vertically.
  400. BOOL bVert = GetParent()->GetPosition() == xtpBarRight || GetParent()->GetPosition() == xtpBarLeft;
  401. // Instantiate an empty CRect object to hold the
  402. // size of the bounding rectangle of the text.
  403. CXTPEmptyRect rcText;
  404. // Function declaration for the DrawTextEx function:
  405. //  CSize DrawTextEx(
  406. //      CDC*    pDC,                A pointer to the current device context.
  407. //      CString str,                A CString object that contains the text to draw.
  408. //      CRect   rcText,             A CRect object that is used to hold the size of the bounding rectangle of the text.
  409. //      BOOL    bDraw,              If TRUE, then the text is drawn.  If FALSE, then the function returns the size of the bounding rectangle of the text.
  410. //      BOOL    bVert,              TRUE if the toolbar is docked in a vertical position.
  411. //      BOOL    bCentered,          TRUE if the text is drawn centered.
  412. //      BOOL    bTriangled,         If TRUE, then an arrow is drawn at the end of the text.
  413. //      BOOL    bEmbosssed = FALSE, TRUE to draw the text embossed.
  414. //  );
  415. // Do not draw the text, just get the size of the bounding rectangle of the text.
  416. CSize sz = GetPaintManager()->DrawControlText(pDC, this, &rcText, FALSE, bVert, FALSE, FALSE);
  417. // If the toolbar is docked in a vertical position,
  418. // then the minimum width of the bounding rectangle is 22.
  419. // The height of the bounding rectangle is the length of the text.
  420. if (bVert)
  421. return CSize(max(22, sz.cx), sz.cy);
  422. // If the toolbar is drawn in a horizontal position, then
  423. // the length of the bounding rectangle is the length of the text.
  424. // The height of the bounding rectangle is a minimum of 22.
  425. return CSize(sz.cx, max(22, sz.cy));
  426. }
  427. void CControlStatic::Draw(CDC* pDC)
  428. {
  429. // Determine if the toolbar is docked horizontally or vertically.
  430. BOOL bVert = GetParent()->GetPosition() == xtpBarRight || GetParent()->GetPosition() == xtpBarLeft;
  431. // Get the bounding rectangle of the control.
  432. CRect rcText = GetRect();
  433. // Function declaration for DrawControlEntry:
  434. // DrawControlEntry(
  435. //      CDC*            pDC,         Pointer to a valid device context
  436. //      CRect           rc,          Rectangle to draw.
  437. //      BOOL            bEnabled,    TRUE if the control is enabled.
  438. //      BOOL            bSelected,   TRUE if the control is selected.
  439. //      BOOL            bPressed,    TRUE if the control is pushed.
  440. //      BOOL            bChecked,    TRUE if the control is checked.
  441. //      BOOL            bPopuped,    TRUE if the control is popuped.
  442. //      XTPBarPosition  barPosition, Parent's bar position.
  443. //  );
  444. // This method is called to fill the control's face.
  445. pDC->SetTextColor(GetPaintManager()->GetRectangleTextColor(FALSE, FALSE, GetEnabled(), FALSE, FALSE, GetParent()->GetType(), GetParent()->GetPosition()));
  446. // Function declaration for the DrawTextEx function:
  447. //  CSize DrawTextEx(
  448. //      CDC*    pDC,                A pointer to the current device context.
  449. //      CString str,                A CString object that contains the text to draw.
  450. //      CRect   rcText,             A CRect object that is used to hold the size of the bounding rectangle of the text.
  451. //      BOOL    bDraw,              If TRUE, then the text is drawn.  If FALSE, then the function returns the size of the bounding rectangle of the text.
  452. //      BOOL    bVert,              TRUE if the toolbar is docked in a vertical position.
  453. //      BOOL    bCentered,          TRUE if the text is drawn centered.
  454. //      BOOL    bTriangled,         If TRUE, then an arrow is drawn at the end of the text.
  455. //      BOOL    bEmbosssed = FALSE, TRUE to draw the text embossed.
  456. //  );
  457. // GetEnabled() returns TRUE if the control is enabled; otherwise FALSE.
  458. GetPaintManager()->DrawControlText(pDC, this, &rcText, TRUE, bVert, TRUE, FALSE);
  459. }
  460. ///////////////////////////////////////////////////////////////////
  461. // CButtonOptions
  462. BEGIN_MESSAGE_MAP(CButtonOptions, CButton)
  463. //{{AFX_MSG_MAP(CButtonOptions)
  464. ON_CONTROL_REFLECT(BN_CLICKED, OnOptionShow)
  465. //}}AFX_MSG_MAP
  466. END_MESSAGE_MAP()
  467. void CButtonOptions::OnOptionShow()
  468. {
  469. // This function sets the vertical draw behavior for the Option
  470. // buttons on the Options toolbar if the toolbar is docked vertically.
  471. // The three possible options are to hide the control, show the control,
  472. // or to draw the control as a button.  These options are defined as an
  473. // enum in the Extreme Tool Kit as follows:
  474. //
  475. //  enum XTPControlCustomVerticalOptions
  476. //  {
  477. //      xtpVerticalHide,  // To hide control if parent toolbar vertically docked.
  478. //      xtpVerticalShow,  // To show control if parent toolbar vertically docked.
  479. //      xtpVerticalButton // To show control as a button.
  480. //  };
  481. // Get a pointer to the CommandBar.
  482. CXTPCommandBar* pCommandBar = DYNAMIC_DOWNCAST(CXTPCommandBar, GetParent());
  483. if (pCommandBar)
  484. {
  485. // Get the ID of the currently selected Options button on the Options toolbar.
  486. int nID = ::GetDlgCtrlID(m_hWnd);
  487. // Loop through all of the controls on the Options CommnadBar.
  488. for (int i = 0; i < pCommandBar->GetControls()->GetCount(); i++)
  489. {
  490. // Use the DYNAMIC_DOWNCAST macro to cast the CButtonOptions control to a CXTPControlCustom control.
  491. CXTPControlCustom* pControl = DYNAMIC_DOWNCAST(CXTPControlCustom, pCommandBar->GetControl(i));
  492. if (pControl)
  493. {
  494. // Set the control's vertical draw style while the toolbar is docked vertically.
  495. switch(nID)
  496. {
  497. case IDC_OPTION_HIDE:  // Option "Hide Vertically" button is selected.
  498. pControl->SetVerticalPositionOption(xtpVerticalHide);
  499. break;
  500. case IDC_OPTION_SHOW: // Options "Show Vertically" button is selected.
  501. pControl->SetVerticalPositionOption(xtpVerticalShow);
  502. break;
  503. case IDC_OPTION_BUTTON: // Options "Show as Button" button is selected.
  504. pControl->SetVerticalPositionOption(xtpVerticalButton);
  505. };
  506. }
  507. }
  508. }
  509. }