MainFrm.cpp
上传用户:xsxdsb
上传日期:2009-12-14
资源大小:672k
文件大小:4k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "SysButton.h"
  5. #include "MainFrm.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMainFrame
  13. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  14. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  15. //{{AFX_MSG_MAP(CMainFrame)
  16. ON_WM_CREATE()
  17. ON_COMMAND(ID_DISABLE_MINBOX, OnDisableMinbox)
  18. ON_COMMAND(ID_DISABLE_MAXBOX, OnDisableMaxbox)
  19. ON_COMMAND(ID_DISABLE_CLOSE, OnDisableClose)
  20. ON_COMMAND(ID_ABLE_MINBOX, OnAbleMinbox)
  21. ON_COMMAND(ID_ABLE_MAXBOX, OnAbleMaxbox)
  22. ON_COMMAND(ID_ABLE_CLOSE, OnAbleClose)
  23. //}}AFX_MSG_MAP
  24. END_MESSAGE_MAP()
  25. static UINT indicators[] =
  26. {
  27. ID_SEPARATOR,           // status line indicator
  28. ID_INDICATOR_CAPS,
  29. ID_INDICATOR_NUM,
  30. ID_INDICATOR_SCRL,
  31. };
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CMainFrame construction/destruction
  34. CMainFrame::CMainFrame()
  35. {
  36. // TODO: add member initialization code here
  37. }
  38. CMainFrame::~CMainFrame()
  39. {
  40. }
  41. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  42. {
  43. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  44. return -1;
  45. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  46. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  47. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  48. {
  49. TRACE0("Failed to create toolbarn");
  50. return -1;      // fail to create
  51. }
  52. if (!m_wndStatusBar.Create(this) ||
  53. !m_wndStatusBar.SetIndicators(indicators,
  54.   sizeof(indicators)/sizeof(UINT)))
  55. {
  56. TRACE0("Failed to create status barn");
  57. return -1;      // fail to create
  58. }
  59. // TODO: Delete these three lines if you don't want the toolbar to
  60. //  be dockable
  61. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  62. EnableDocking(CBRS_ALIGN_ANY);
  63. DockControlBar(&m_wndToolBar);
  64. return 0;
  65. }
  66. /////////////////////////////////////////////////////////////////////////////
  67. // CMainFrame diagnostics
  68. #ifdef _DEBUG
  69. void CMainFrame::AssertValid() const
  70. {
  71. CFrameWnd::AssertValid();
  72. }
  73. void CMainFrame::Dump(CDumpContext& dc) const
  74. {
  75. CFrameWnd::Dump(dc);
  76. }
  77. #endif //_DEBUG
  78. /////////////////////////////////////////////////////////////////////////////
  79. // CMainFrame message handlers
  80. //使最小化按钮无效
  81. void CMainFrame::OnDisableMinbox() 
  82. {
  83. //获得窗口风格
  84. LONG style = ::GetWindowLong(m_hWnd,GWL_STYLE);
  85. //设置新的风格
  86. style &=  ~(WS_MINIMIZEBOX);
  87. ::SetWindowLong(m_hWnd,GWL_STYLE,style);
  88. //重化窗口边框
  89. CRect rc;
  90. GetWindowRect(&rc);
  91. ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,rc.left,rc.top,rc.Width(),rc.Height(),SWP_DRAWFRAME);
  92. }
  93. //使最大化按钮无效
  94. void CMainFrame::OnDisableMaxbox() 
  95. {
  96. //获得窗口风格
  97. LONG style = ::GetWindowLong(m_hWnd,GWL_STYLE);
  98. //设置新的风格
  99. style &=  ~(WS_MAXIMIZEBOX);
  100. ::SetWindowLong(m_hWnd,GWL_STYLE,style);
  101. //重化窗口边框
  102. CRect rc;
  103. GetWindowRect(&rc);
  104. ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,rc.left,rc.top,rc.Width(),rc.Height(),SWP_DRAWFRAME);
  105. }
  106. //使关闭按钮无效
  107. void CMainFrame::OnDisableClose() 
  108. {
  109. //获得系统菜单
  110. CMenu *pMenu=GetSystemMenu(FALSE);
  111. //获得关闭按钮的ID
  112. int x=pMenu->GetMenuItemCount();
  113. UINT pID=pMenu->GetMenuItemID(x-1);
  114. //使关闭按钮无效
  115. pMenu->EnableMenuItem(pID, MF_DISABLED);
  116. }
  117. //使最小化按钮有效
  118. void CMainFrame::OnAbleMinbox() 
  119. {
  120. //获得窗口风格
  121. LONG style = ::GetWindowLong(m_hWnd,GWL_STYLE);
  122. //设置新的风格
  123. style |= WS_MINIMIZEBOX;
  124. ::SetWindowLong(m_hWnd,GWL_STYLE,style);
  125. //重化窗口边框
  126. CRect rc;
  127. GetWindowRect(&rc);
  128. ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,rc.left,rc.top,rc.Width(),rc.Height(),SWP_DRAWFRAME);
  129. }
  130. //使最大化按钮有效
  131. void CMainFrame::OnAbleMaxbox() 
  132. {
  133. //获得窗口风格
  134. LONG style = ::GetWindowLong(m_hWnd,GWL_STYLE);
  135. //设置新的风格
  136. style |= WS_MAXIMIZEBOX;
  137. ::SetWindowLong(m_hWnd,GWL_STYLE,style);
  138. //重化窗口边框
  139. CRect rc;
  140. GetWindowRect(&rc);
  141. ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,rc.left,rc.top,rc.Width(),rc.Height(),SWP_DRAWFRAME);
  142. }
  143. //使关闭按钮有效
  144. void CMainFrame::OnAbleClose() 
  145. {
  146. //获得系统菜单
  147. CMenu *pMenu=GetSystemMenu(FALSE);
  148. //获得关闭按钮的ID
  149. int x=pMenu->GetMenuItemCount();
  150. UINT pID=pMenu->GetMenuItemID(x-1);
  151. //使关闭按钮有效
  152. pMenu->EnableMenuItem(pID, MF_ENABLED);
  153. }