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

对话框与窗口

开发平台:

Visual C++

  1. // [!output VIEW_IMPL] : implementation of the [!output VIEW_CLASS] class
  2. //
  3. #include "stdafx.h"
  4. #include "[!output APP_HEADER]"
  5. [!if OLEDB_RECORD_VIEW || ODBC_RECORD_VIEW]
  6. #include "[!output ROWSET_HEADER]"
  7. [!endif]
  8. #include "[!output DOC_HEADER]"
  9. [!if CONTAINER || CONTAINER_SERVER]
  10. #include "[!output CONTAINER_ITEM_HEADER]"
  11. [!endif]
  12. #include "[!output VIEW_HEADER]"
  13. #ifdef _DEBUG
  14. #define new DEBUG_NEW
  15. #endif
  16. // [!output VIEW_CLASS]
  17. IMPLEMENT_DYNCREATE([!output VIEW_CLASS], [!output VIEW_BASE_CLASS])
  18. BEGIN_MESSAGE_MAP([!output VIEW_CLASS], [!output VIEW_BASE_CLASS])
  19. [!if PROJECT_STYLE_EXPLORER]
  20. [!if LIST_VIEW]
  21. ON_WM_STYLECHANGED()
  22. [!endif]
  23. [!endif]
  24. [!if CONTAINER || CONTAINER_SERVER]
  25. ON_WM_DESTROY()
  26. [!if !RICH_EDIT_VIEW]
  27. ON_WM_SETFOCUS()
  28. ON_WM_SIZE()
  29. ON_COMMAND(ID_OLE_INSERT_NEW, OnInsertObject)
  30. ON_COMMAND(ID_CANCEL_EDIT_CNTR, OnCancelEditCntr)
  31. ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
  32. [!else]
  33. [!if PRINTING]
  34. // Standard printing commands
  35. ON_COMMAND(ID_FILE_PRINT, &[!output VIEW_BASE_CLASS]::OnFilePrint)
  36. [!endif]
  37. [!endif]
  38. [!else]
  39. [!if PRINTING]
  40. // Standard printing commands
  41. ON_COMMAND(ID_FILE_PRINT, &[!output VIEW_BASE_CLASS]::OnFilePrint)
  42. [!endif]
  43. [!endif]
  44. [!if MINI_SERVER || FULL_SERVER || CONTAINER_SERVER]
  45. ON_COMMAND(ID_CANCEL_EDIT_SRVR, &[!output VIEW_CLASS]::OnCancelEditSrvr)
  46. [!endif]
  47. [!if PRINTING]
  48. [!if !HTML_VIEW && !HTML_EDITVIEW && !ACTIVE_DOC_CONTAINER]
  49. ON_COMMAND(ID_FILE_PRINT_DIRECT, &[!output VIEW_BASE_CLASS]::OnFilePrint)
  50. ON_COMMAND(ID_FILE_PRINT_PREVIEW, &[!output VIEW_BASE_CLASS]::OnFilePrintPreview)
  51. [!endif]
  52. [!if ACTIVE_DOC_CONTAINER]
  53. ON_COMMAND(ID_FILE_PRINT_DIRECT, &[!output VIEW_BASE_CLASS]::OnFilePrint)
  54. ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
  55. ON_UPDATE_COMMAND_UI(ID_FILE_PRINT_PREVIEW, OnFilePrintPreviewUIUpdate)
  56. [!endif]
  57. [!endif]
  58. END_MESSAGE_MAP()
  59. [!if HTML_EDITVIEW]
  60. BEGIN_DHTMLEDITING_CMDMAP([!output VIEW_CLASS])
  61. DHTMLEDITING_CMD_ENTRY(ID_EDIT_COPY, IDM_COPY)
  62. DHTMLEDITING_CMD_ENTRY(ID_EDIT_CUT, IDM_CUT)
  63. DHTMLEDITING_CMD_ENTRY(ID_EDIT_PASTE, IDM_PASTE)
  64. DHTMLEDITING_CMD_ENTRY(ID_EDIT_UNDO, IDM_UNDO)
  65. END_DHTMLEDITING_CMDMAP()
  66. [!endif]
  67. // [!output VIEW_CLASS] construction/destruction
  68. [!output VIEW_CLASS]::[!output VIEW_CLASS]()
  69. [!if FORM_VIEW || OLEDB_RECORD_VIEW || ODBC_RECORD_VIEW]
  70. : [!output VIEW_BASE_CLASS]([!output VIEW_CLASS]::IDD)
  71. [!endif]
  72. {
  73. [!if ACCESSIBILITY]
  74. EnableActiveAccessibility();
  75. [!endif]
  76. [!if FORM_VIEW || OLEDB_RECORD_VIEW || ODBC_RECORD_VIEW]
  77. [!if OLEDB_RECORD_VIEW || ODBC_RECORD_VIEW]
  78. m_pSet = NULL;
  79. [!endif]
  80. [!endif]
  81. [!if CONTAINER || CONTAINER_SERVER]
  82. [!if !RICH_EDIT_VIEW]
  83. m_pSelection = NULL;
  84. [!endif]
  85. [!endif]
  86. // TODO: add construction code here
  87. }
  88. [!output VIEW_CLASS]::~[!output VIEW_CLASS]()
  89. {
  90. }
  91. [!if FORM_VIEW || OLEDB_RECORD_VIEW || ODBC_RECORD_VIEW]
  92. void [!output VIEW_CLASS]::DoDataExchange(CDataExchange* pDX)
  93. {
  94. [!output VIEW_BASE_CLASS]::DoDataExchange(pDX);
  95. [!if ODBC_RECORD_VIEW]
  96. // you can insert DDX_Field* functions here to 'connect' your controls to the database fields, ex.
  97. // DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet->m_szColumn1, m_pSet);
  98. // DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet->m_bColumn2, m_pSet);
  99. // See MSDN and ODBC samples for more information
  100. [!endif]
  101. [!if OLEDB_RECORD_VIEW]
  102. // you can insert DDX_* functions, as well as SetDlgItem*/GetDlgItem* API calls to link your database to the view
  103. // ex. ::SetDlgItemText(m_hWnd, IDC_MYCONTROL, m_pSet->m_MyColumn);
  104. // See MSDN and OLEDB samples for more information
  105. [!endif]
  106. }
  107. [!endif]
  108. BOOL [!output VIEW_CLASS]::PreCreateWindow(CREATESTRUCT& cs)
  109. {
  110. // TODO: Modify the Window class or styles here by modifying
  111. //  the CREATESTRUCT cs
  112. [!if EDIT_VIEW]
  113. BOOL bPreCreated = CEditView::PreCreateWindow(cs);
  114. cs.style &= ~(ES_AUTOHSCROLL|WS_HSCROLL);   // Enable word-wrapping
  115. return bPreCreated;
  116. [!else]
  117. return [!output VIEW_BASE_CLASS]::PreCreateWindow(cs);
  118. [!endif]
  119. }
  120. [!if !TREE_VIEW && !LIST_VIEW && !HTML_VIEW && !HTML_EDITVIEW && !RICH_EDIT_VIEW && !EDIT_VIEW && !FORM_VIEW && !OLEDB_RECORD_VIEW && !ODBC_RECORD_VIEW]
  121. // [!output VIEW_CLASS] drawing
  122. [!if CONTAINER || CONTAINER_SERVER]
  123. [!if !ACTIVE_DOC_CONTAINER]
  124. void [!output VIEW_CLASS]::OnDraw(CDC* pDC)
  125. {
  126. [!output DOC_CLASS]* pDoc = GetDocument();
  127. ASSERT_VALID(pDoc);
  128. // TODO: add draw code for native data here
  129. // TODO: also draw all OLE items in the document
  130. // Draw the selection at an arbitrary position.  This code should be
  131. //  removed once your real drawing code is implemented.  This position
  132. //  corresponds exactly to the rectangle returned by [!output CONTAINER_ITEM_CLASS],
  133. //  to give the effect of in-place editing.
  134. // TODO: remove this code when final draw code is complete.
  135. if (m_pSelection != NULL)
  136. {
  137. CSize size;
  138. CRect rect(10, 10, 210, 210);
  139. if (SUCCEEDED(m_pSelection->GetExtent(&size, m_pSelection->m_nDrawAspect)))
  140. {
  141. pDC->HIMETRICtoLP(&size);
  142. rect.right = size.cx + 10;
  143. rect.bottom = size.cy + 10;
  144. }
  145. m_pSelection->Draw(pDC, rect);
  146. }
  147. }
  148. [!else]
  149. void [!output VIEW_CLASS]::OnDraw(CDC* /*pDC*/)
  150. {
  151. [!output DOC_CLASS]* pDoc = GetDocument();
  152. ASSERT_VALID(pDoc);
  153. // TODO: add draw code for native data here
  154. }[!endif]
  155. [!else]
  156. void [!output VIEW_CLASS]::OnDraw(CDC* /*pDC*/)
  157. {
  158. [!output DOC_CLASS]* pDoc = GetDocument();
  159. ASSERT_VALID(pDoc);
  160. // TODO: add draw code for native data here
  161. }
  162. [!endif]
  163. [!endif]
  164. [!if PRINTING]
  165. [!if TREE_VIEW || LIST_VIEW]
  166. void [!output VIEW_CLASS]::OnDraw(CDC* /*pDC*/)
  167. {
  168. [!output DOC_CLASS]* pDoc = GetDocument();
  169. ASSERT_VALID(pDoc);
  170. // TODO: add draw code for native data here
  171. }
  172. [!endif]
  173. [!endif]
  174. [!if SCROLL_VIEW || CONTAINER || CONTAINER_SERVER || OLEDB_RECORD_VIEW || LIST_VIEW || TREE_VIEW || FORM_VIEW || HTML_VIEW || ODBC_RECORD_VIEW]
  175. void [!output VIEW_CLASS]::OnInitialUpdate()
  176. {
  177. [!if ODBC_RECORD_VIEW]
  178. m_pSet = &GetDocument()->[!output ROWSET_CLASS_VARIABLE_NAME];
  179. [!endif]
  180. [!if OLEDB_RECORD_VIEW]
  181. m_pSet = &GetDocument()->[!output ROWSET_CLASS_VARIABLE_NAME];
  182. {
  183. CWaitCursor wait;
  184. HRESULT hr = m_pSet->OpenAll();
  185. if (FAILED(hr))
  186. {
  187. // Failed to open recordset.  If the recordset is a
  188. // stored procedure, make sure that you have properly
  189. // initialized any input parameters before calling
  190. // the OpenAll() method.
  191. AfxMessageBox(_T("Record set failed to open."), MB_OK);
  192. // Disable the Next and Previous record commands,
  193. // since attempting to change the current record without an
  194. // open RowSet will cause a crash
  195. m_bOnFirstRecord = TRUE;
  196. m_bOnLastRecord = TRUE;
  197. }
  198. if( hr == DB_S_ENDOFROWSET )
  199. {
  200. // the rowset is empty (does not contain any rows)
  201. AfxMessageBox(_T("Record set opened but there were no rows to return."), MB_OK);
  202. // Disable the Next and Previous record commands
  203. m_bOnFirstRecord = TRUE;
  204. m_bOnLastRecord = TRUE;
  205. }
  206. }
  207. [!endif]
  208. [!output VIEW_BASE_CLASS]::OnInitialUpdate();
  209. [!if FORM_VIEW]
  210. [!if APP_TYPE_SDI]
  211. GetParentFrame()->RecalcLayout();
  212. [!endif]
  213. ResizeParentToFit();
  214. [!endif]
  215. [!if LIST_VIEW]
  216. // TODO: You may populate your ListView with items by directly accessing
  217. //  its list control through a call to GetListCtrl().
  218. [!if TREE_VIEW]
  219. // TODO: You may populate your TreeView with items by directly accessing
  220. //  its tree control through a call to GetTreeCtrl().
  221. [!if HTML_VIEW]
  222. // TODO: This code navigates to a popular spot on the web.
  223. //  change the code to go where you'd like.
  224. [!endif]
  225. [!endif]
  226. [!endif]
  227. [!if HTML_VIEW]
  228. Navigate2(_T("http://www.msdn.microsoft.com/visualc/"),NULL,NULL);
  229. [!endif]
  230. [!if CONTAINER || CONTAINER_SERVER]
  231. [!if !RICH_EDIT_VIEW]
  232. // TODO: remove this code when final selection model code is written
  233. m_pSelection = NULL;    // initialize selection
  234. [!endif]
  235. [!if RICH_EDIT_VIEW]
  236. // Set the printing margins (720 twips = 1/2 inch)
  237. SetMargins(CRect(720, 720, 720, 720));
  238. [!endif]
  239. [!endif]
  240. [!if SCROLL_VIEW]
  241. CSize sizeTotal;
  242. // TODO: calculate the total size of this view
  243. sizeTotal.cx = sizeTotal.cy = 100;
  244. SetScrollSizes(MM_TEXT, sizeTotal);
  245. [!endif]
  246. }
  247. [!endif]
  248. [!if PRINTING]
  249. // [!output VIEW_CLASS] printing
  250. [!if ACTIVE_DOC_CONTAINER]
  251. void [!output VIEW_CLASS]::OnFilePrintPreviewUIUpdate(CCmdUI* pCmdUI)
  252. {
  253. if (m_pSelection != NULL)
  254. {
  255. DWORD dwStatus = 0;
  256. if (SUCCEEDED(m_pSelection->QueryCommand(OLECMDID_PRINTPREVIEW, &dwStatus)) &&
  257. dwStatus & OLECMDF_ENABLED)
  258. {
  259. pCmdUI->Enable(TRUE);
  260. return;
  261. }
  262. }
  263. pCmdUI->Enable(FALSE);
  264. }
  265. void [!output VIEW_CLASS]::OnFilePrintPreview()
  266. {
  267. if (!m_pSelection)
  268. return;
  269. m_pSelection->ExecCommand(OLECMDID_PRINTPREVIEW);
  270. }
  271. [!endif]
  272. [!if !HTML_VIEW && !HTML_EDITVIEW]
  273. BOOL [!output VIEW_CLASS]::OnPreparePrinting(CPrintInfo* pInfo)
  274. {
  275. [!if EDIT_VIEW]
  276. // default CEditView preparation
  277. return CEditView::OnPreparePrinting(pInfo);
  278. [!else]
  279. [!if ACTIVE_DOC_CONTAINER]
  280. if (!CView::DoPreparePrinting(pInfo))
  281. return FALSE;
  282. if (!COleDocObjectItem::OnPreparePrinting(this, pInfo))
  283. return FALSE;
  284. return TRUE;
  285. [!else]
  286. // default preparation
  287. return DoPreparePrinting(pInfo);
  288. [!endif]
  289. [!endif]
  290. }
  291. [!if !RICH_EDIT_VIEW]
  292. [!if EDIT_VIEW]
  293. void [!output VIEW_CLASS]::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
  294. [!else]
  295. void [!output VIEW_CLASS]::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  296. [!endif]
  297. {
  298. [!if EDIT_VIEW]
  299. // Default CEditView begin printing
  300. CEditView::OnBeginPrinting(pDC, pInfo);
  301. [!else]
  302. // TODO: add extra initialization before printing
  303. [!endif]
  304. }
  305. [!if EDIT_VIEW]
  306. void [!output VIEW_CLASS]::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
  307. [!else]
  308. void [!output VIEW_CLASS]::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  309. [!endif]
  310. {
  311. [!if EDIT_VIEW]
  312. // Default CEditView end printing
  313. CEditView::OnEndPrinting(pDC, pInfo);
  314. [!else]
  315. // TODO: add cleanup after printing
  316. [!endif]
  317. }
  318. [!endif]
  319. [!endif]
  320. [!if FORM_VIEW || ACTIVE_DOC_CONTAINER]
  321. [!if ACTIVE_DOC_CONTAINER]
  322. void [!output VIEW_CLASS]::OnPrint(CDC* pDC, CPrintInfo* pInfo)
  323. [!else]
  324. void [!output VIEW_CLASS]::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
  325. [!endif]
  326. {
  327. // TODO: add customized printing code here
  328. [!if ACTIVE_DOC_CONTAINER]
  329. if(pInfo->m_bDocObject)
  330. COleDocObjectItem::OnPrint(this, pInfo, TRUE);
  331. else
  332. CView::OnPrint(pDC, pInfo);
  333. [!endif]
  334. }
  335. [!endif]
  336. [!endif]
  337. [!if CONTAINER || CONTAINER_SERVER]
  338. void [!output VIEW_CLASS]::OnDestroy()
  339. {
  340. // Deactivate the item on destruction; this is important
  341. // when a splitter view is being used
  342.    COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  343.    if (pActiveItem != NULL && pActiveItem->GetActiveView() == this)
  344.    {
  345.   pActiveItem->Deactivate();
  346.   ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL);
  347.    }
  348.    [!output VIEW_BASE_CLASS]::OnDestroy();
  349. }
  350. [!if !RICH_EDIT_VIEW]
  351. // OLE Client support and commands
  352. BOOL [!output VIEW_CLASS]::IsSelected(const CObject* pDocItem) const
  353. {
  354. // The implementation below is adequate if your selection consists of
  355. //  only [!output CONTAINER_ITEM_CLASS] objects.  To handle different selection
  356. //  mechanisms, the implementation here should be replaced
  357. // TODO: implement this function that tests for a selected OLE client item
  358. return pDocItem == m_pSelection;
  359. }
  360. void [!output VIEW_CLASS]::OnInsertObject()
  361. {
  362. // Invoke the standard Insert Object dialog box to obtain information
  363. //  for new [!output CONTAINER_ITEM_CLASS] object
  364. COleInsertDialog dlg;
  365. [!if ACTIVE_DOC_CONTAINER]
  366. if (dlg.DoModal(COleInsertDialog::DocObjectsOnly) != IDOK)
  367. return;
  368. [!else]
  369. if (dlg.DoModal() != IDOK)
  370. return;
  371. [!endif]
  372. BeginWaitCursor();
  373. [!output CONTAINER_ITEM_CLASS]* pItem = NULL;
  374. TRY
  375. {
  376. // Create new item connected to this document
  377. [!output DOC_CLASS]* pDoc = GetDocument();
  378. ASSERT_VALID(pDoc);
  379. pItem = new [!output CONTAINER_ITEM_CLASS](pDoc);
  380. ASSERT_VALID(pItem);
  381. // Initialize the item from the dialog data
  382. if (!dlg.CreateItem(pItem))
  383. AfxThrowMemoryException();  // any exception will do
  384. ASSERT_VALID(pItem);
  385. [!if ACTIVE_DOC_CONTAINER]
  386. pItem->DoVerb(OLEIVERB_SHOW, this);
  387. [!else]
  388. if (dlg.GetSelectionType() == COleInsertDialog::createNewItem)
  389. pItem->DoVerb(OLEIVERB_SHOW, this);
  390. [!endif]
  391. ASSERT_VALID(pItem);
  392. // As an arbitrary user interface design, this sets the selection
  393. //  to the last item inserted
  394. // TODO: reimplement selection as appropriate for your application
  395. m_pSelection = pItem;   // set selection to last inserted item
  396. pDoc->UpdateAllViews(NULL);
  397. }
  398. CATCH(CException, e)
  399. {
  400. if (pItem != NULL)
  401. {
  402. ASSERT_VALID(pItem);
  403. pItem->Delete();
  404. }
  405. AfxMessageBox(IDP_FAILED_TO_CREATE);
  406. }
  407. END_CATCH
  408. EndWaitCursor();
  409. }
  410. // The following command handler provides the standard keyboard
  411. //  user interface to cancel an in-place editing session.  Here,
  412. //  the container (not the server) causes the deactivation
  413. void [!output VIEW_CLASS]::OnCancelEditCntr()
  414. {
  415. // Close any in-place active item on this view.
  416. COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  417. if (pActiveItem != NULL)
  418. {
  419. pActiveItem->Close();
  420. }
  421. ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL);
  422. }
  423. // Special handling of OnSetFocus and OnSize are required for a container
  424. //  when an object is being edited in-place
  425. void [!output VIEW_CLASS]::OnSetFocus(CWnd* pOldWnd)
  426. {
  427. COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  428. if (pActiveItem != NULL &&
  429. pActiveItem->GetItemState() == COleClientItem::activeUIState)
  430. {
  431. // need to set focus to this item if it is in the same view
  432. CWnd* pWnd = pActiveItem->GetInPlaceWindow();
  433. if (pWnd != NULL)
  434. {
  435. pWnd->SetFocus();   // don't call the base class
  436. return;
  437. }
  438. }
  439. [!output VIEW_BASE_CLASS]::OnSetFocus(pOldWnd);
  440. }
  441. void [!output VIEW_CLASS]::OnSize(UINT nType, int cx, int cy)
  442. {
  443. [!output VIEW_BASE_CLASS]::OnSize(nType, cx, cy);
  444. COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  445. if (pActiveItem != NULL)
  446. pActiveItem->SetItemRects();
  447. }
  448. void [!output VIEW_CLASS]::OnFilePrint()
  449. {
  450. //By default, we ask the Active document to print itself
  451. //using IOleCommandTarget. If you don't want this behavior
  452. //remove the call to COleDocObjectItem::DoDefaultPrinting.
  453. //If the call fails for some reason, we will try printing
  454. //the docobject using the IPrint interface.
  455. CPrintInfo printInfo;
  456. ASSERT(printInfo.m_pPD != NULL);
  457. if (S_OK == COleDocObjectItem::DoDefaultPrinting(this, &printInfo))
  458. return;
  459. CView::OnFilePrint();
  460. }
  461. [!endif]
  462. [!endif]
  463. [!if MINI_SERVER || FULL_SERVER || CONTAINER_SERVER]
  464. // OLE Server support
  465. // The following command handler provides the standard keyboard
  466. //  user interface to cancel an in-place editing session.  Here,
  467. //  the server (not the container) causes the deactivation
  468. void [!output VIEW_CLASS]::OnCancelEditSrvr()
  469. {
  470. GetDocument()->OnDeactivateUI(FALSE);
  471. }
  472. [!endif]
  473. // [!output VIEW_CLASS] diagnostics
  474. #ifdef _DEBUG
  475. void [!output VIEW_CLASS]::AssertValid() const
  476. {
  477. [!output VIEW_BASE_CLASS]::AssertValid();
  478. }
  479. void [!output VIEW_CLASS]::Dump(CDumpContext& dc) const
  480. {
  481. [!output VIEW_BASE_CLASS]::Dump(dc);
  482. }
  483. [!output DOC_CLASS]* [!output VIEW_CLASS]::GetDocument() const // non-debug version is inline
  484. {
  485. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS([!output DOC_CLASS])));
  486. return ([!output DOC_CLASS]*)m_pDocument;
  487. }
  488. #endif //_DEBUG
  489. [!if OLEDB_RECORD_VIEW]
  490. // [!output VIEW_CLASS] database support
  491. CRowset<>* [!output VIEW_CLASS]::OnGetRowset()
  492. {
  493. return m_pSet->GetRowsetBase();
  494. }
  495. [!endif]
  496. [!if ODBC_RECORD_VIEW]
  497. // [!output VIEW_CLASS] database support
  498. CRecordset* [!output VIEW_CLASS]::OnGetRecordset()
  499. {
  500. return m_pSet;
  501. }
  502. [!endif]
  503. // [!output VIEW_CLASS] message handlers
  504. [!if PROJECT_STYLE_EXPLORER]
  505. [!if LIST_VIEW]
  506. void [!output VIEW_CLASS]::OnStyleChanged(int /*nStyleType*/, LPSTYLESTRUCT /*lpStyleStruct*/)
  507. {
  508. //TODO: add code to react to the user changing the view style of your window
  509. }
  510. [!endif]
  511. [!endif]