MainFrm.cpp
上传用户:szcysw
上传日期:2013-03-11
资源大小:6752k
文件大小:11k
源码类别:

界面编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "TaxExpert.h"
  5. #include "resource.h"
  6. #include "TaxExpertView.h"
  7. #include "Splash.h"
  8. #include "MainFrm.h"
  9. #include "FolderListView.h"
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CMainFrame
  17. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  18. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  19. //{{AFX_MSG_MAP(CMainFrame)
  20. ON_WM_CREATE()
  21. ON_COMMAND(ID_PREVIEW_PANE, OnPreviewPane)
  22. ON_UPDATE_COMMAND_UI(ID_PREVIEW_PANE, OnUpdatePreviewPane)
  23. ON_WM_DESTROY()
  24. ON_MESSAGE(WM_INTERACTIVE_WITH_FRAME,InteractiveWithViews)
  25. ON_COMMAND(ID_UPDATE, update)
  26. ON_COMMAND(ID_USER, UserDefine)
  27. ON_COMMAND(ID_OUTPUTWORD, InputIntoWord)
  28. ON_COMMAND(ID_FILE_PRINT_FRAME, PrintDoc)
  29. ON_MESSAGE(WM_OUTBAR_NOTIFY, OnOutbarNotify)
  30. //ON_MESSAGE(CBN_SELCHANGE, ID_PLACEHOLDER, OnComboTextChanged)
  31. ON_COMMAND(CBN_SELCHANGE,OnComboTextChanged)
  32. //}}AFX_MSG_MAP
  33. END_MESSAGE_MAP()
  34. static UINT indicators[] =
  35. {
  36. ID_SEPARATOR,           // status line indicator
  37. ID_INDICATOR_CAPS,
  38. ID_INDICATOR_NUM,
  39. ID_INDICATOR_SCRL,
  40. };
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CMainFrame construction/destruction
  43. CMainFrame::CMainFrame()
  44. {
  45. m_bPreview = 1;
  46. }
  47. //处理从子窗口收到的信息
  48. #include "ContainerView.h"
  49. #include "top1.h"
  50. void CMainFrame::InteractiveWithViews(WPARAM FromWhere,LPARAM detail)
  51. {
  52. //如果是从树形视图送来的消息,表明需要进行分类查找
  53. if(FromWhere==ID_FROM_FOLDERVIEW)
  54. {
  55. //调用CTop完成查询
  56. CTop* view=(CTop*)(GetMainView()->m_wndSplitter2.GetPane(0,0));
  57. ::SendMessage(view->m_hWnd,WM_RECONSTRUCT,0,(LPARAM)(LPCSTR)detail);
  58. return;
  59. }
  60. //如果是从列表视图送过来的消息,直接调用CContainerView进行显示
  61. if(FromWhere==ID_FROM_LIST)
  62. {
  63. //确认CContainerView已经打开
  64. if(!(m_bPreview))
  65. {
  66. GetMainView()->m_wndSplitter2.ShowRow();
  67. m_bPreview = !m_bPreview;
  68. }
  69. CString strURL((LPSTR)(LPCSTR)detail);
  70. //查找出CContainerView,进行strURL文件的显示
  71. CContainerView* htmlview=(CContainerView*)(GetMainView()->m_wndSplitter2.GetPane(1,0));
  72. htmlview->Navigate(strURL);
  73. }
  74. return;
  75. }
  76. CMainFrame::~CMainFrame()
  77. {
  78. }
  79. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  80. {
  81. lpCreateStruct->hMenu=NULL;
  82. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  83. return -1;
  84. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  85. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  86. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  87. {
  88. TRACE0("Failed to create toolbarn");
  89. return -1;      // fail to create
  90. }
  91. // 在工具条中插入组合列表框
  92. m_pComboBox = (CCJFlatComboBox*)m_wndToolBar.InsertControl(RUNTIME_CLASS(CCJFlatComboBox), 
  93. NULL, CRect(0,0,200,150), ID_PLACEHOLDER, CBS_DROPDOWN );
  94. m_pComboBox->AddString(_T("请在此输入查询内容"));
  95. m_pComboBox->SetCurSel(0);
  96. m_pComboBox->EnableAutoCompletion();
  97. if (!m_wndStatusBar.Create(this) ||
  98. !m_wndStatusBar.SetIndicators(indicators,
  99. sizeof(indicators)/sizeof(UINT)))
  100. {
  101. TRACE0("Failed to create status barn");
  102. return -1;      // fail to create
  103. }
  104. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  105. EnableDocking(CBRS_ALIGN_ANY);
  106. DockControlBar(&m_wndToolBar);
  107. // CG: The following line was added by the Splash Screen component. CSplashWnd::ShowSplashScreen(this);
  108. //设置当前窗口的标记,避免同一窗口同时运行
  109. ::SetProp(m_hWnd,"660E72B2-6BF7-4897-8EF2-9C33FBC49564", (HANDLE)1);
  110. CenterWindow();
  111. ShowWindow(SW_MAXIMIZE);
  112. return 0;
  113. }
  114. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  115. {
  116. //禁用菜单
  117. cs.hMenu=NULL;
  118. if( !CFrameWnd::PreCreateWindow(cs) )
  119. return FALSE;
  120. return TRUE;
  121. }
  122. /////////////////////////////////////////////////////////////////////////////
  123. // CMainFrame diagnostics
  124. #ifdef _DEBUG
  125. void CMainFrame::AssertValid() const
  126. {
  127. CFrameWnd::AssertValid();
  128. }
  129. void CMainFrame::Dump(CDumpContext& dc) const
  130. {
  131. CFrameWnd::Dump(dc);
  132. }
  133. #endif //_DEBUG
  134. /////////////////////////////////////////////////////////////////////////////
  135. // CMainFrame message handlers
  136. CString shortcut[6]={
  137. "税收政策",
  138. "税务征管",
  139. "财政法规",
  140. "涉税法规",
  141. "纳税辅导",
  142. "用户自定义"};
  143. CString tax[20]={
  144. "增值税",
  145. "消费税",
  146. "营业税",
  147. "企业所得税(内资)",
  148. "企业所得税(外资)",
  149. "个人所得税",
  150. "资源税",
  151. "城建税",
  152. "印花税",
  153. "车船使用税",
  154. "屠宰税",
  155. "城镇土地使用税",
  156. "房产税",
  157. "土地增值税",
  158. "农业税",
  159. "农业特产税",
  160. "契税",
  161. "车辆购置税",
  162. "车船牌照使用税",
  163. "固定资产投资方向调节税(停征)"
  164. };
  165. CString swgl[8]={
  166. " 税收征收管理",
  167. "税务检查",
  168. "税务代理",
  169. "出口退税",
  170. "进出口税收",
  171. "涉外税收",
  172. "税收协定",
  173. "其他杂项",
  174. };
  175. //创建切切窗口、初始化快捷方式列表框
  176. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
  177. {
  178. // 将窗口切分成1行一两列
  179. if (!m_wndSplitter.CreateStatic(this, 1, 2))
  180. {
  181. TRACE0("Failed to create splitter windown");
  182. return FALSE;
  183. }
  184. // 第二列窗口的类视图为CTaxExpertView
  185. if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CTaxExpertView),
  186. CSize(0, 0), pContext))
  187. {
  188. TRACE0("Failed to create CTaxExpertViewn"); 
  189. return FALSE;
  190. }
  191. //设置建立m_wndOutlookBar外观
  192. DWORD dwStyle = 
  193. CGfxOutBarCtrl::fDragItems    |
  194. CGfxOutBarCtrl::fEditGroups   |
  195. CGfxOutBarCtrl::fEditItems    |
  196. CGfxOutBarCtrl::fRemoveGroups |
  197. CGfxOutBarCtrl::fRemoveItems  |
  198. CGfxOutBarCtrl::fAddGroups    |
  199. CGfxOutBarCtrl::fAnimation;
  200. // 建立m_wndOutlookBar控件
  201. if (!m_wndOutlookBar.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,0,0),
  202. &m_wndSplitter, m_wndSplitter.IdFromRowCol(0, 0), dwStyle))
  203. {
  204. TRACE0("Failed to create outlook bar.");
  205. return FALSE;
  206. }
  207.     
  208. // m_wndOutlookBar控件的父窗口设置成窗口框架
  209. m_wndOutlookBar.SetOwner(this);
  210. // 为列表控件装入图像列表:大图标和小图标
  211. m_ImageSmall.Create (16, 16, TRUE, 2, 1);
  212. m_ImageLarge.Create (32, 32, TRUE, 2, 1);
  213. for( int nIcon = IDI_ICON_OUTLOOK; nIcon <= IDI_ICON_PUBLIC; ++nIcon ) 
  214. {
  215. HICON hIcon = AfxGetApp()->LoadIcon(nIcon);
  216. ASSERT(hIcon);
  217. m_ImageSmall.Add(hIcon);
  218. m_ImageLarge.Add(hIcon);
  219. }
  220. //设置m_wndOutlookBar控件的图像列表
  221. m_wndOutlookBar.SetImageList(&m_ImageLarge, CGfxOutBarCtrl::fLargeIcon);
  222. m_wndOutlookBar.SetImageList(&m_ImageSmall, CGfxOutBarCtrl::fSmallIcon);
  223. //设置列表项滑动速度
  224. m_wndOutlookBar.SetAnimationTickCount(20);
  225. m_wndOutlookBar.SetAnimSelHighlight(200);
  226. //添加快捷方式
  227. m_wndOutlookBar.AddFolder(shortcut[0],  FOLDER_0);
  228. m_wndOutlookBar.AddFolder(shortcut[1], FOLDER_1);
  229. m_wndOutlookBar.AddFolder(shortcut[1], FOLDER_2);
  230. m_wndOutlookBar.AddFolder(shortcut[3], FOLDER_3);
  231. m_wndOutlookBar.AddFolder(shortcut[4], FOLDER_4);
  232. m_wndOutlookBar.AddFolder(shortcut[5], FOLDER_5);
  233. //添加快捷方式的子项:往“税收政策”项加入二十个税种
  234. for (int i=0;i<20;i++)
  235. //5:图标在图像列表中的索引值
  236. m_wndOutlookBar.InsertItem(FOLDER_0, CMD_00+i,tax[i],  5, i);
  237. for (i=0;i<8;i++)
  238. m_wndOutlookBar.InsertItem(FOLDER_1, CMD_00+i, swgl[i],  6, i);
  239. //当前选择项为1
  240. m_wndOutlookBar.SetSelFolder(0);
  241. CRect r;
  242. GetClientRect(&r);
  243. int w1 = r.Width()/7;
  244. int w2 = r.Width()/5;
  245. //设置m_wndOutlookBar大小
  246. m_wndSplitter.SetColumnInfo( 0, w1, 0 );
  247. m_wndSplitter.SetColumnInfo( 1, w2, 0 );
  248. m_wndSplitter.RecalcLayout();
  249. return TRUE;
  250. }
  251. /*OnOutbarNotify:负责响应来自m_wndOutlookBar控件的信息
  252. 当在m_wndOutlookBar上的选择发生变化是时,通知
  253. CFolderListView进行前选择项在更改
  254. */
  255. long CMainFrame::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
  256. {
  257. CTaxExpertView* view=(CTaxExpertView*)GetMainView();
  258. CFolderListView* TreeView=(CFolderListView* )(view->m_wndSplitter.GetPane(0,0));
  259. CWnd* wndTop=GetMainView()->m_wndSplitter2.GetPane( 0, 0);
  260. switch (wParam)
  261. {
  262. case NM_OB_ITEMCLICK:
  263. {
  264. // 得到当前选择的快捷方式
  265. int nFolder = m_wndOutlookBar.GetSelFolder();
  266. // 得到当前选择的子项
  267. int nIndex  = (int)lParam;
  268. //得到CFolderListView的树形控件
  269. CCJTreeCtrl* pTreeCtrl = GetMainView()->GetFolderTreeCtrl();
  270. //可以对不同的快捷方式进行处理,这里只处理两个
  271. switch (nFolder)
  272. {
  273. case FOLDER_0:
  274. //让树形控件对应的子节点被选中
  275. pTreeCtrl->SelectItem(pTreeCtrl
  276. ->FindItem(tax[CMD_00+nIndex],0,0,1,TreeView->hti[0]));
  277. break;
  278. case FOLDER_1:
  279. pTreeCtrl->SelectItem(pTreeCtrl
  280. ->FindItem(swgl[CMD_00+nIndex],0,1,1,TreeView->hti[1]));
  281. break;
  282. }
  283. }
  284. return 0;
  285. }
  286. return 0;
  287. }
  288. void CMainFrame::OnGfxLargeicon() 
  289. {
  290. m_wndOutlookBar.SetSmallIconView(false);
  291. }
  292. void CMainFrame::OnUpdateGfxLargeicon(CCmdUI* pCmdUI) 
  293. {
  294. pCmdUI->SetCheck(!m_wndOutlookBar.IsSmallIconView());
  295. }
  296. void CMainFrame::OnGfxSmallicon() 
  297. {
  298. m_wndOutlookBar.SetSmallIconView(true);
  299. }
  300. void CMainFrame::OnUpdateGfxSmallicon(CCmdUI* pCmdUI) 
  301. {
  302. pCmdUI->SetCheck(m_wndOutlookBar.IsSmallIconView());
  303. }
  304. CTaxExpertView* CMainFrame::GetMainView()
  305. {
  306. CTaxExpertView* pView = DYNAMIC_DOWNCAST(CTaxExpertView, m_wndSplitter.GetPane(0,1));
  307. ASSERT_KINDOF(CTaxExpertView, pView);
  308. return pView;
  309. }
  310. void CMainFrame::OnPreviewPane() 
  311. {
  312. if(m_bPreview) {
  313. GetMainView()->m_wndSplitter2.HideRow(1);
  314. }
  315. else {
  316. GetMainView()->m_wndSplitter2.ShowRow();
  317. }
  318. m_bPreview = !m_bPreview;
  319. }
  320. void CMainFrame::OnUpdatePreviewPane(CCmdUI* pCmdUI) 
  321. {
  322. pCmdUI->SetCheck(m_bPreview);
  323. }
  324. void CMainFrame::OnDestroy() 
  325. {
  326. CFrameWnd::OnDestroy();
  327. }
  328. /*
  329. 在编辑框中输入的关键词发生变化时的响应函数
  330. 根据输入的关键词,向CTop以送信息
  331. */
  332. void CMainFrame::OnComboTextChanged()
  333. {
  334. CString str;
  335. m_pComboBox->GetWindowText(str);
  336. //如果关键词内容没有发生变动
  337. if(str.Find("查询内容")!=-1)
  338. return;
  339. //将输入的关键词记录下来,作为列表的备选项
  340. m_pComboBox->AddString(str);
  341. //修改标题栏
  342. CTaxExpertView* pView= (CTaxExpertView*)(GetMainView());
  343. CString cap;
  344. cap="全文模糊查询,关键词:";
  345. cap+=""";
  346. //如果未在树形视图中指定查找的税种
  347. if(pView->current_sel_sub.IsEmpty())
  348. cap+=str+"""+"在所有类中";
  349. else
  350. cap+=str+"""+"在"+pView->current_sel_sub+"类之中";
  351. pView->m_Caption.UpdateCaption(cap,0);
  352. //如果查询内容包含有+号,将之转换成SQL语句
  353. CString tmp=str;
  354. tmp.Replace("+","*' AND content like'*");
  355. CString filter;
  356. filter="content like'*"+tmp+"*'";
  357. //如果选择有子类。则将查询范围限制在子类中
  358. if(!(pView->current_sel_sub.IsEmpty()))
  359. {
  360. filter+="AND [cata]=";
  361. filter+="'"+pView->current_sel_sub+"'";
  362. }
  363. if((m_bPreview))
  364. { //隐藏 CContainerView
  365. GetMainView()->m_wndSplitter2.HideRow(1);
  366. m_bPreview = !m_bPreview;
  367. }
  368. //查找出CTOP的窗口
  369. CWnd* CTOP=GetMainView()->m_wndSplitter2.GetPane(0,0);
  370. //向列表窗口发出重建命令
  371.  ::SendMessage(CTOP->m_hWnd,WM_RECONSTRUCT,
  372. ID_FUZZY_FIND,(LPARAM)(LPCSTR)(filter));
  373. }
  374. #include "Splash.h"
  375. void CMainFrame::UserDefine()
  376. {
  377. MessageBox("为了你的法规库的稳定及超级链引用的正确,建议不要使用此功能!rnrn如果非要使用,请与作者联系,我会告诉你具体的办法!","抱歉",MB_ICONEXCLAMATION|MB_OK);
  378. }
  379. void CMainFrame::update()
  380. {
  381. MessageBox("请与作者联系升级事宜。请在电子邮件注明你的注册号!","提示",MB_ICONEXCLAMATION|MB_OK);
  382. }
  383. void CMainFrame::InputIntoWord()
  384. {
  385. MessageBox("请在文档中单击右键将文档全部选中,复制文档rnrn之后在WORD中进行粘贴即可。","提示",MB_ICONEXCLAMATION|MB_OK);
  386. }
  387. void CMainFrame::PrintDoc()
  388. {
  389. MessageBox("请在文档中单击右键,选择"打印"即可","提示",MB_ICONEXCLAMATION|MB_OK);
  390. }