MainFrm.cpp
上传用户:easylife05
上传日期:2007-02-14
资源大小:393k
文件大小:6k
源码类别:

PlugIns编程

开发平台:

Visual C++

  1. // MainFrm.cpp : CMainFrame 类的实现
  2. //
  3. #include "stdafx.h"
  4. #include "Platform.h"
  5. #include "MainFrm.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. // CMainFrame
  10. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  11. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  12. ON_WM_CREATE()
  13. // ON_WM_MOUSEMOVE()
  14. ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  15. // ON_WM_NCMOUSEMOVE()
  16. // ON_WM_NCHITTEST()
  17. END_MESSAGE_MAP()
  18. static UINT indicators[] =
  19. {
  20. ID_SEPARATOR,           // 状态行指示器
  21. ID_INDICATOR_CAPS,
  22. ID_INDICATOR_NUM,
  23. ID_INDICATOR_SCRL,
  24. };
  25. // CMainFrame 构造/销毁
  26. CMainFrame::CMainFrame()
  27. {
  28. // TODO:在此添加成员初始化代码
  29. m_baseToolID=m_currentToolID=ID_VIEWTOOLBAR;
  30. }
  31. CMainFrame::~CMainFrame()
  32. {
  33. m_pluginToolBarList.ClearAll();
  34. }
  35. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  36. {
  37. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  38. return -1;
  39. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  40. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  41. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  42. {
  43. TRACE0("未能创建工具栏n");
  44. return -1;      // 未能创建
  45. }
  46. m_wndToolBar.SetWindowText("主工具");
  47. if (!m_wndStatusBar.Create(this) ||
  48. !m_wndStatusBar.SetIndicators(indicators,
  49.   sizeof(indicators)/sizeof(UINT)))
  50. {
  51. TRACE0("未能创建状态栏n");
  52. return -1;      // 未能创建
  53. }
  54. // TODO: 如果不需要工具栏可停靠,则删除这三行
  55. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  56. EnableDocking(CBRS_ALIGN_ANY);
  57. DockControlBar(&m_wndToolBar);
  58. return 0;
  59. }
  60. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  61. {
  62. if( !CFrameWnd::PreCreateWindow(cs) )
  63. return FALSE;
  64. // TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
  65. // 样式
  66. return TRUE;
  67. }
  68. // CMainFrame 诊断
  69. #ifdef _DEBUG
  70. void CMainFrame::AssertValid() const
  71. {
  72. CFrameWnd::AssertValid();
  73. }
  74. void CMainFrame::Dump(CDumpContext& dc) const
  75. {
  76. CFrameWnd::Dump(dc);
  77. }
  78. #endif //_DEBUG
  79. // CMainFrame 消息处理程序
  80. //void CMainFrame::OnAddtoolbar()
  81. //{
  82. // if (m_wndToolBarAdd1.m_hWnd!=NULL) 
  83. // { //将关闭的工具条打开
  84. // BOOL bVisible = ((m_wndToolBarAdd1.IsWindowVisible()) != 0);
  85. // if (bVisible) return;
  86. // ShowControlBar(&m_wndToolBarAdd1, !bVisible, FALSE);
  87. // RecalcLayout();
  88. // return;
  89. // }
  90. //
  91. //}
  92. void CMainFrame::AddPluginToolbar(HBITMAP hBitmap,UINT iMenuID,int iCount,char* cName)
  93. {
  94. CToolBar* pToolBar;
  95. pToolBar=new CToolBar();
  96. if (!pToolBar->CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  97. | CBRS_GRIPPER |  CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC ) )
  98. {
  99. TRACE0("未能创建工具栏n");
  100.      }
  101. if (!pToolBar->SetBitmap(hBitmap))
  102. {
  103. TRACE0("未能创建工具栏位图n");
  104. }
  105. pToolBar->SetButtons(NULL, iCount);
  106. for (int i=0;i<iCount;i++)
  107.         pToolBar->SetButtonInfo(i, iMenuID+i,TBBS_BUTTON, i);
  108. /*m_wndToolBarAdd1.SetButtonInfo(1, ID_DYNAMENU+1,TBBS_BUTTON, 1);
  109. m_wndToolBarAdd1.SetButtonInfo(5, ID_DYNAMENU+5,TBBS_BUTTON, 5);
  110. m_wndToolBarAdd1.SetButtonInfo(7, ID_SEPARATOR,TBBS_SEPARATOR, 6);*/
  111. //使用工具条能够浮动和有入坞功能
  112. pToolBar->SetWindowText(cName);
  113. pToolBar->EnableDocking(CBRS_ALIGN_ANY);
  114. EnableDocking(CBRS_ALIGN_ANY);
  115. //DockControlBar(pToolBar);
  116. CToolBar* pLastTool;
  117. pLastTool=m_pluginToolBarList.GetLast();
  118. if (pLastTool==NULL)
  119. DockControlBarLeftOf(pToolBar,&m_wndToolBar);
  120. else
  121. DockControlBarLeftOf(pToolBar,pLastTool);
  122. this->RecalcLayout();
  123. // 定位视图子菜单
  124. CMenu* pViewMenu = NULL;
  125. CMenu* pTopMenu = GetMenu();
  126. int iPos;
  127. for (iPos = pTopMenu->GetMenuItemCount()-1; iPos >= 0; iPos--)
  128. {
  129. CMenu* pMenu = pTopMenu->GetSubMenu(iPos);
  130. if (pMenu && pMenu->GetMenuItemID(0) == ID_VIEW_TOOLBAR)
  131. {
  132. pViewMenu = pMenu;
  133. break;
  134. }
  135. }
  136. //增加插件查看工具条菜单
  137. if (pLastTool==NULL) pViewMenu->AppendMenu(MF_SEPARATOR);
  138. pViewMenu->AppendMenu(MF_STRING,m_currentToolID, cName);
  139. m_pluginToolBarList.Add(m_currentToolID,pToolBar);
  140. m_currentToolID++;
  141. }
  142. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
  143. {
  144. // If pHandlerInfo is NULL, then handle the message
  145. if (pHandlerInfo == NULL)
  146. {
  147. if (nCode == CN_COMMAND)
  148. {
  149. if ((nID>=m_baseToolID) && (nID<m_currentToolID))
  150. {
  151. CToolBar* pToolBar;
  152. pToolBar=m_pluginToolBarList.Find(nID);
  153. BOOL bVisible = ((pToolBar->IsWindowVisible()) != 0);
  154. //if (bVisible) return true;
  155. ShowControlBar(pToolBar, !bVisible, FALSE);
  156. RecalcLayout();
  157. return TRUE;
  158. }
  159. }
  160. else if (nCode == CN_UPDATE_COMMAND_UI)
  161. {
  162. if ((nID>=m_baseToolID) && (nID<m_currentToolID))
  163. {
  164. ((CCmdUI*)pExtra)->Enable(TRUE);
  165. CToolBar* pToolBar;
  166. pToolBar=m_pluginToolBarList.Find(nID);
  167. if (pToolBar==NULL) return TRUE;
  168. BOOL bVisible = ((pToolBar->IsWindowVisible()) != 0);
  169. ((CCmdUI*)pExtra)->SetCheck(bVisible);
  170. return TRUE;
  171. }
  172. //----------------------------------------------
  173. }
  174. }
  175. return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  176. }
  177. void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf)
  178. {
  179. CRect rect;
  180. DWORD dw;
  181. UINT n;
  182. // get MFC to adjust the dimensions of all docked ToolBars
  183. // so that GetWindowRect will be accurate
  184. RecalcLayout();
  185. LeftOf->GetWindowRect(&rect);
  186. rect.OffsetRect(1,0);
  187. dw=LeftOf->GetBarStyle();
  188. n = 0;
  189. n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
  190. n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
  191. n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
  192. n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;
  193. // When we take the default parameters on rect, DockControlBar will dock
  194. // each Toolbar on a seperate line.  By calculating a rectangle, we in effect
  195. // are simulating a Toolbar being dragged to that location and docked.
  196. DockControlBar(Bar,n,&rect);
  197. }
  198. BOOL  CMainFrame::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
  199. {
  200.     TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
  201.     UINT nID =UINT(pNMHDR->idFrom);
  202.     {
  203.            
  204. CMenu* pTopMenu = GetMenu();
  205. char lpStr[80];
  206. pTopMenu->GetMenuString(nID,lpStr,80,MF_BYCOMMAND);
  207. pTTT->lpszText =lpStr;
  208. strcpy(pTTT->szText,"dddddd");
  209. //m_wndStatusBar.SetPaneText(0, "My New Status Bar Text", TRUE);
  210.             pTTT->hinst = NULL;
  211.             return(TRUE);
  212.     }
  213. }