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

对话框与窗口

开发平台:

Visual C++

  1. // [!output CHILD_FRAME_IMPL] : implementation of the [!output CHILD_FRAME_CLASS] class
  2. //
  3. #include "stdafx.h"
  4. #include "[!output APP_HEADER]"
  5. #include "[!output CHILD_FRAME_HEADER]"
  6. [!if PROJECT_STYLE_EXPLORER]
  7. #include "[!output TREE_VIEW_HEADER]"
  8. #include "[!output VIEW_HEADER]"
  9. [!endif]
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #endif
  13. // [!output CHILD_FRAME_CLASS]
  14. IMPLEMENT_DYNCREATE([!output CHILD_FRAME_CLASS], [!output CHILD_FRAME_BASE_CLASS])
  15. BEGIN_MESSAGE_MAP([!output CHILD_FRAME_CLASS], [!output CHILD_FRAME_BASE_CLASS])
  16. [!if !DOCVIEW]
  17. ON_COMMAND(ID_FILE_CLOSE, &[!output CHILD_FRAME_CLASS]::OnFileClose)
  18. ON_WM_SETFOCUS()
  19. ON_WM_CREATE()
  20. [!endif]
  21. [!if PROJECT_STYLE_EXPLORER]
  22. [!if LIST_VIEW]
  23. ON_UPDATE_COMMAND_UI_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, &[!output CHILD_FRAME_CLASS]::OnUpdateViewStyles)
  24. ON_COMMAND_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, &[!output CHILD_FRAME_CLASS]::OnViewStyle)
  25. [!endif]
  26. [!endif]
  27. END_MESSAGE_MAP()
  28. // [!output CHILD_FRAME_CLASS] construction/destruction
  29. [!output CHILD_FRAME_CLASS]::[!output CHILD_FRAME_CLASS]()
  30. {
  31. [!if ACCESSIBILITY]
  32. EnableActiveAccessibility();
  33. [!endif]
  34. // TODO: add member initialization code here
  35. }
  36. [!output CHILD_FRAME_CLASS]::~[!output CHILD_FRAME_CLASS]()
  37. {
  38. }
  39. [!if APP_TYPE_MDI && SPLITTER]
  40. BOOL [!output CHILD_FRAME_CLASS]::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
  41. {
  42. [!if PROJECT_STYLE_EXPLORER]
  43. // create splitter window
  44. if (!m_wndSplitter.CreateStatic(this, 1, 2))
  45. return FALSE;
  46. if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS([!output TREE_VIEW_CLASS]), CSize(100, 100), pContext) ||
  47. !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS([!output VIEW_CLASS]), CSize(100, 100), pContext))
  48. {
  49. m_wndSplitter.DestroyWindow();
  50. return FALSE;
  51. }
  52. return TRUE;
  53. [!else]
  54. [!if HTML_VIEW || HTML_EDITVIEW]
  55. return m_wndSplitter.Create(this,
  56. 2, 2,           // TODO: adjust the number of rows, columns
  57. CSize(10, 10),  // TODO: adjust the minimum pane size
  58. pContext, WS_CHILD | WS_VISIBLE | SPLS_DYNAMIC_SPLIT);
  59. [!else]
  60. return m_wndSplitter.Create(this,
  61. 2, 2,           // TODO: adjust the number of rows, columns
  62. CSize(10, 10),  // TODO: adjust the minimum pane size
  63. pContext);
  64. [!endif]
  65. [!endif]
  66. }
  67. [!else]
  68. [!if PROJECT_STYLE_EXPLORER]
  69. BOOL [!output CHILD_FRAME_CLASS]::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
  70. {
  71. // create splitter window
  72. if (!m_wndSplitter.CreateStatic(this, 1, 2))
  73. return FALSE;
  74. if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS([!output TREE_VIEW_CLASS]), CSize(100, 100), pContext) ||
  75. !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS([!output VIEW_CLASS]), CSize(100, 100), pContext))
  76. {
  77. m_wndSplitter.DestroyWindow();
  78. return FALSE;
  79. }
  80. return TRUE;
  81. }
  82. [!endif]
  83. [!endif]
  84. BOOL [!output CHILD_FRAME_CLASS]::PreCreateWindow(CREATESTRUCT& cs)
  85. {
  86. [!if MDITABS]
  87. // Make sure view is maximum size to eliminate
  88. // flicker when switching tabs.
  89. cs.x = cs.y = 0;
  90. cs.cx = cs.cy = 32767;
  91. [!endif]
  92. // TODO: Modify the Window class or styles here by modifying the CREATESTRUCT cs
  93. if( ![!output CHILD_FRAME_BASE_CLASS]::PreCreateWindow(cs) )
  94. return FALSE;
  95. [!if !CHILD_FRAME_DEFAULT_STYLES]
  96. cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
  97. | FWS_ADDTOTITLE[!output CHILD_FRAME_STYLE_FLAGS];
  98. [!endif]
  99. [!if !DOCVIEW]
  100. cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
  101. cs.lpszClass = AfxRegisterWndClass(0);
  102. [!endif]
  103. return TRUE;
  104. }
  105. [!if MDITABS]
  106. void [!output CHILD_FRAME_CLASS]::ActivateFrame(int nCmdShow)
  107. {
  108. if (GetParent()->GetWindow(GW_CHILD) == this)
  109. {
  110. nCmdShow = SW_SHOWMAXIMIZED;
  111. }
  112. [!output CHILD_FRAME_BASE_CLASS]::ActivateFrame(nCmdShow);
  113. }
  114. [!endif]
  115. // [!output CHILD_FRAME_CLASS] diagnostics
  116. #ifdef _DEBUG
  117. void [!output CHILD_FRAME_CLASS]::AssertValid() const
  118. {
  119. [!output CHILD_FRAME_BASE_CLASS]::AssertValid();
  120. }
  121. void [!output CHILD_FRAME_CLASS]::Dump(CDumpContext& dc) const
  122. {
  123. [!output CHILD_FRAME_BASE_CLASS]::Dump(dc);
  124. }
  125. #endif //_DEBUG
  126. // [!output CHILD_FRAME_CLASS] message handlers
  127. [!if PROJECT_STYLE_EXPLORER]
  128. [!if LIST_VIEW]
  129. [!output VIEW_CLASS]* [!output CHILD_FRAME_CLASS]::GetRightPane()
  130. {
  131. CWnd* pWnd = m_wndSplitter.GetPane(0, 1);
  132. [!output VIEW_CLASS]* pView = DYNAMIC_DOWNCAST([!output VIEW_CLASS], pWnd);
  133. return pView;
  134. }
  135. void [!output CHILD_FRAME_CLASS]::OnUpdateViewStyles(CCmdUI* pCmdUI)
  136. {
  137. // TODO: customize or extend this code to handle choices on the View menu.
  138. [!output VIEW_CLASS]* pView = GetRightPane();
  139. // if the right-hand pane hasn't been created or isn't a view, disable commands in our range
  140. if (pView == NULL)
  141. pCmdUI->Enable(FALSE);
  142. else
  143. {
  144. DWORD dwStyle = pView->GetStyle() & LVS_TYPEMASK;
  145. // if the command is ID_VIEW_LINEUP, only enable command
  146. // when we're in LVS_ICON or LVS_SMALLICON mode
  147. if (pCmdUI->m_nID == ID_VIEW_LINEUP)
  148. {
  149. if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON)
  150. pCmdUI->Enable();
  151. else
  152. pCmdUI->Enable(FALSE);
  153. }
  154. else
  155. {
  156. // otherwise, use dots to reflect the style of the view
  157. pCmdUI->Enable();
  158. BOOL bChecked = FALSE;
  159. switch (pCmdUI->m_nID)
  160. {
  161. case ID_VIEW_DETAILS:
  162. bChecked = (dwStyle == LVS_REPORT);
  163. break;
  164. case ID_VIEW_SMALLICON:
  165. bChecked = (dwStyle == LVS_SMALLICON);
  166. break;
  167. case ID_VIEW_LARGEICON:
  168. bChecked = (dwStyle == LVS_ICON);
  169. break;
  170. case ID_VIEW_LIST:
  171. bChecked = (dwStyle == LVS_LIST);
  172. break;
  173. default:
  174. bChecked = FALSE;
  175. break;
  176. }
  177. pCmdUI->SetRadio(bChecked ? 1 : 0);
  178. }
  179. }
  180. }
  181. void [!output CHILD_FRAME_CLASS]::OnViewStyle(UINT nCommandID)
  182. {
  183. // TODO: customize or extend this code to handle choices on the View menu.
  184. [!output VIEW_CLASS]* pView = GetRightPane();
  185. // if the right-hand pane has been created and is a [!output VIEW_CLASS], process the menu commands...
  186. if (pView != NULL)
  187. {
  188. int nStyle = -1;
  189. switch (nCommandID)
  190. {
  191. case ID_VIEW_LINEUP:
  192. {
  193. // ask the list control to snap to grid
  194. CListCtrl& refListCtrl = pView->GetListCtrl();
  195. refListCtrl.Arrange(LVA_SNAPTOGRID);
  196. }
  197. break;
  198. // other commands change the style on the list control
  199. case ID_VIEW_DETAILS:
  200. nStyle = LVS_REPORT;
  201. break;
  202. case ID_VIEW_SMALLICON:
  203. nStyle = LVS_SMALLICON;
  204. break;
  205. case ID_VIEW_LARGEICON:
  206. nStyle = LVS_ICON;
  207. break;
  208. case ID_VIEW_LIST:
  209. nStyle = LVS_LIST;
  210. break;
  211. }
  212. // change the style; window will repaint automatically
  213. if (nStyle != -1)
  214. pView->ModifyStyle(LVS_TYPEMASK, nStyle);
  215. }
  216. }
  217. [!endif]
  218. [!endif]
  219. [!if !DOCVIEW]
  220. void [!output CHILD_FRAME_CLASS]::OnFileClose()
  221. {
  222. // To close the frame, just send a WM_CLOSE, which is the equivalent
  223. // choosing close from the system menu.
  224. SendMessage(WM_CLOSE);
  225. }
  226. int [!output CHILD_FRAME_CLASS]::OnCreate(LPCREATESTRUCT lpCreateStruct)
  227. {
  228. if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
  229. return -1;
  230. // create a view to occupy the client area of the frame
  231. if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
  232. CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
  233. {
  234. TRACE0("Failed to create view windown");
  235. return -1;
  236. }
  237. return 0;
  238. }
  239. void [!output CHILD_FRAME_CLASS]::OnSetFocus(CWnd* pOldWnd)
  240. {
  241. CMDIChildWnd::OnSetFocus(pOldWnd);
  242. m_wndView.SetFocus();
  243. }
  244. BOOL [!output CHILD_FRAME_CLASS]::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
  245. {
  246. // let the view have first crack at the command
  247. if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  248. return TRUE;
  249. // otherwise, do default handling
  250. return CMDIChildWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  251. }
  252. [!endif]