www.gusucode.com > 基于VC编程界面编程高级应用技术源码程序 > VC界面编程高级应用技术/code/2/TaxExpert/MainFrm.cpp
// MainFrm.cpp : implementation of the CMainFrame class // #include "stdafx.h" #include "TaxExpert.h" #include "resource.h" #include "TaxExpertView.h" #include "Splash.h" #include "MainFrm.h" #include "FolderListView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMainFrame IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_COMMAND(ID_PREVIEW_PANE, OnPreviewPane) ON_UPDATE_COMMAND_UI(ID_PREVIEW_PANE, OnUpdatePreviewPane) ON_WM_DESTROY() ON_MESSAGE(WM_INTERACTIVE_WITH_FRAME,InteractiveWithViews) ON_COMMAND(ID_UPDATE, update) ON_COMMAND(ID_USER, UserDefine) ON_COMMAND(ID_OUTPUTWORD, InputIntoWord) ON_COMMAND(ID_FILE_PRINT_FRAME, PrintDoc) ON_MESSAGE(WM_OUTBAR_NOTIFY, OnOutbarNotify) //ON_MESSAGE(CBN_SELCHANGE, ID_PLACEHOLDER, OnComboTextChanged) ON_COMMAND(CBN_SELCHANGE,OnComboTextChanged) //}}AFX_MSG_MAP END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; ///////////////////////////////////////////////////////////////////////////// // CMainFrame construction/destruction CMainFrame::CMainFrame() { m_bPreview = 1; } //处理从子窗口收到的信息 #include "ContainerView.h" #include "top1.h" void CMainFrame::InteractiveWithViews(WPARAM FromWhere,LPARAM detail) { //如果是从树形视图送来的消息,表明需要进行分类查找 if(FromWhere==ID_FROM_FOLDERVIEW) { //调用CTop完成查询 CTop* view=(CTop*)(GetMainView()->m_wndSplitter2.GetPane(0,0)); ::SendMessage(view->m_hWnd,WM_RECONSTRUCT,0,(LPARAM)(LPCSTR)detail); return; } //如果是从列表视图送过来的消息,直接调用CContainerView进行显示 if(FromWhere==ID_FROM_LIST) { //确认CContainerView已经打开 if(!(m_bPreview)) { GetMainView()->m_wndSplitter2.ShowRow(); m_bPreview = !m_bPreview; } CString strURL((LPSTR)(LPCSTR)detail); //查找出CContainerView,进行strURL文件的显示 CContainerView* htmlview=(CContainerView*)(GetMainView()->m_wndSplitter2.GetPane(1,0)); htmlview->Navigate(strURL); } return; } CMainFrame::~CMainFrame() { } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { lpCreateStruct->hMenu=NULL; if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } // 在工具条中插入组合列表框 m_pComboBox = (CCJFlatComboBox*)m_wndToolBar.InsertControl(RUNTIME_CLASS(CCJFlatComboBox), NULL, CRect(0,0,200,150), ID_PLACEHOLDER, CBS_DROPDOWN ); m_pComboBox->AddString(_T("请在此输入查询内容")); m_pComboBox->SetCurSel(0); m_pComboBox->EnableAutoCompletion(); if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); // CG: The following line was added by the Splash Screen component. CSplashWnd::ShowSplashScreen(this); //设置当前窗口的标记,避免同一窗口同时运行 ::SetProp(m_hWnd,"660E72B2-6BF7-4897-8EF2-9C33FBC49564", (HANDLE)1); CenterWindow(); ShowWindow(SW_MAXIMIZE); return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { //禁用菜单 cs.hMenu=NULL; if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CMainFrame diagnostics #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMainFrame message handlers CString shortcut[6]={ "税收政策", "税务征管", "财政法规", "涉税法规", "纳税辅导", "用户自定义"}; CString tax[20]={ "增值税", "消费税", "营业税", "企业所得税(内资)", "企业所得税(外资)", "个人所得税", "资源税", "城建税", "印花税", "车船使用税", "屠宰税", "城镇土地使用税", "房产税", "土地增值税", "农业税", "农业特产税", "契税", "车辆购置税", "车船牌照使用税", "固定资产投资方向调节税(停征)" }; CString swgl[8]={ " 税收征收管理", "税务检查", "税务代理", "出口退税", "进出口税收", "涉外税收", "税收协定", "其他杂项", }; //创建切切窗口、初始化快捷方式列表框 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // 将窗口切分成1行一两列 if (!m_wndSplitter.CreateStatic(this, 1, 2)) { TRACE0("Failed to create splitter window\n"); return FALSE; } // 第二列窗口的类视图为CTaxExpertView if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CTaxExpertView), CSize(0, 0), pContext)) { TRACE0("Failed to create CTaxExpertView\n"); return FALSE; } //设置建立m_wndOutlookBar外观 DWORD dwStyle = CGfxOutBarCtrl::fDragItems | CGfxOutBarCtrl::fEditGroups | CGfxOutBarCtrl::fEditItems | CGfxOutBarCtrl::fRemoveGroups | CGfxOutBarCtrl::fRemoveItems | CGfxOutBarCtrl::fAddGroups | CGfxOutBarCtrl::fAnimation; // 建立m_wndOutlookBar控件 if (!m_wndOutlookBar.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), &m_wndSplitter, m_wndSplitter.IdFromRowCol(0, 0), dwStyle)) { TRACE0("Failed to create outlook bar."); return FALSE; } // m_wndOutlookBar控件的父窗口设置成窗口框架 m_wndOutlookBar.SetOwner(this); // 为列表控件装入图像列表:大图标和小图标 m_ImageSmall.Create (16, 16, TRUE, 2, 1); m_ImageLarge.Create (32, 32, TRUE, 2, 1); for( int nIcon = IDI_ICON_OUTLOOK; nIcon <= IDI_ICON_PUBLIC; ++nIcon ) { HICON hIcon = AfxGetApp()->LoadIcon(nIcon); ASSERT(hIcon); m_ImageSmall.Add(hIcon); m_ImageLarge.Add(hIcon); } //设置m_wndOutlookBar控件的图像列表 m_wndOutlookBar.SetImageList(&m_ImageLarge, CGfxOutBarCtrl::fLargeIcon); m_wndOutlookBar.SetImageList(&m_ImageSmall, CGfxOutBarCtrl::fSmallIcon); //设置列表项滑动速度 m_wndOutlookBar.SetAnimationTickCount(20); m_wndOutlookBar.SetAnimSelHighlight(200); //添加快捷方式 m_wndOutlookBar.AddFolder(shortcut[0], FOLDER_0); m_wndOutlookBar.AddFolder(shortcut[1], FOLDER_1); m_wndOutlookBar.AddFolder(shortcut[1], FOLDER_2); m_wndOutlookBar.AddFolder(shortcut[3], FOLDER_3); m_wndOutlookBar.AddFolder(shortcut[4], FOLDER_4); m_wndOutlookBar.AddFolder(shortcut[5], FOLDER_5); //添加快捷方式的子项:往“税收政策”项加入二十个税种 for (int i=0;i<20;i++) //5:图标在图像列表中的索引值 m_wndOutlookBar.InsertItem(FOLDER_0, CMD_00+i,tax[i], 5, i); for (i=0;i<8;i++) m_wndOutlookBar.InsertItem(FOLDER_1, CMD_00+i, swgl[i], 6, i); //当前选择项为1 m_wndOutlookBar.SetSelFolder(0); CRect r; GetClientRect(&r); int w1 = r.Width()/7; int w2 = r.Width()/5; //设置m_wndOutlookBar大小 m_wndSplitter.SetColumnInfo( 0, w1, 0 ); m_wndSplitter.SetColumnInfo( 1, w2, 0 ); m_wndSplitter.RecalcLayout(); return TRUE; } /*OnOutbarNotify:负责响应来自m_wndOutlookBar控件的信息 当在m_wndOutlookBar上的选择发生变化是时,通知 CFolderListView进行前选择项在更改 */ long CMainFrame::OnOutbarNotify(WPARAM wParam, LPARAM lParam) { CTaxExpertView* view=(CTaxExpertView*)GetMainView(); CFolderListView* TreeView=(CFolderListView* )(view->m_wndSplitter.GetPane(0,0)); CWnd* wndTop=GetMainView()->m_wndSplitter2.GetPane( 0, 0); switch (wParam) { case NM_OB_ITEMCLICK: { // 得到当前选择的快捷方式 int nFolder = m_wndOutlookBar.GetSelFolder(); // 得到当前选择的子项 int nIndex = (int)lParam; //得到CFolderListView的树形控件 CCJTreeCtrl* pTreeCtrl = GetMainView()->GetFolderTreeCtrl(); //可以对不同的快捷方式进行处理,这里只处理两个 switch (nFolder) { case FOLDER_0: //让树形控件对应的子节点被选中 pTreeCtrl->SelectItem(pTreeCtrl\ ->FindItem(tax[CMD_00+nIndex],0,0,1,TreeView->hti[0])); break; case FOLDER_1: pTreeCtrl->SelectItem(pTreeCtrl\ ->FindItem(swgl[CMD_00+nIndex],0,1,1,TreeView->hti[1])); break; } } return 0; } return 0; } void CMainFrame::OnGfxLargeicon() { m_wndOutlookBar.SetSmallIconView(false); } void CMainFrame::OnUpdateGfxLargeicon(CCmdUI* pCmdUI) { pCmdUI->SetCheck(!m_wndOutlookBar.IsSmallIconView()); } void CMainFrame::OnGfxSmallicon() { m_wndOutlookBar.SetSmallIconView(true); } void CMainFrame::OnUpdateGfxSmallicon(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_wndOutlookBar.IsSmallIconView()); } CTaxExpertView* CMainFrame::GetMainView() { CTaxExpertView* pView = DYNAMIC_DOWNCAST(CTaxExpertView, m_wndSplitter.GetPane(0,1)); ASSERT_KINDOF(CTaxExpertView, pView); return pView; } void CMainFrame::OnPreviewPane() { if(m_bPreview) { GetMainView()->m_wndSplitter2.HideRow(1); } else { GetMainView()->m_wndSplitter2.ShowRow(); } m_bPreview = !m_bPreview; } void CMainFrame::OnUpdatePreviewPane(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bPreview); } void CMainFrame::OnDestroy() { CFrameWnd::OnDestroy(); } /* 在编辑框中输入的关键词发生变化时的响应函数 根据输入的关键词,向CTop以送信息 */ void CMainFrame::OnComboTextChanged() { CString str; m_pComboBox->GetWindowText(str); //如果关键词内容没有发生变动 if(str.Find("查询内容")!=-1) return; //将输入的关键词记录下来,作为列表的备选项 m_pComboBox->AddString(str); //修改标题栏 CTaxExpertView* pView= (CTaxExpertView*)(GetMainView()); CString cap; cap="全文模糊查询,关键词:"; cap+="\""; //如果未在树形视图中指定查找的税种 if(pView->current_sel_sub.IsEmpty()) cap+=str+"\""+"在所有类中"; else cap+=str+"\""+"在"+pView->current_sel_sub+"类之中"; pView->m_Caption.UpdateCaption(cap,0); //如果查询内容包含有+号,将之转换成SQL语句 CString tmp=str; tmp.Replace("+","*' AND content like'*"); CString filter; filter="content like'*"+tmp+"*'"; //如果选择有子类。则将查询范围限制在子类中 if(!(pView->current_sel_sub.IsEmpty())) { filter+="AND [cata]="; filter+="'"+pView->current_sel_sub+"'"; } if((m_bPreview)) { //隐藏 CContainerView GetMainView()->m_wndSplitter2.HideRow(1); m_bPreview = !m_bPreview; } //查找出CTOP的窗口 CWnd* CTOP=GetMainView()->m_wndSplitter2.GetPane(0,0); //向列表窗口发出重建命令 ::SendMessage(CTOP->m_hWnd,WM_RECONSTRUCT, ID_FUZZY_FIND,(LPARAM)(LPCSTR)(filter)); } #include "Splash.h" void CMainFrame::UserDefine() { MessageBox("为了你的法规库的稳定及超级链引用的正确,建议不要使用此功能!\r\n\r\n如果非要使用,请与作者联系,我会告诉你具体的办法!","抱歉",MB_ICONEXCLAMATION|MB_OK); } void CMainFrame::update() { MessageBox("请与作者联系升级事宜。请在电子邮件注明你的注册号!","提示",MB_ICONEXCLAMATION|MB_OK); } void CMainFrame::InputIntoWord() { MessageBox("请在文档中单击右键将文档全部选中,复制文档\r\n\r\n之后在WORD中进行粘贴即可。","提示",MB_ICONEXCLAMATION|MB_OK); } void CMainFrame::PrintDoc() { MessageBox("请在文档中单击右键,选择\"打印\"即可","提示",MB_ICONEXCLAMATION|MB_OK); }