三、主界面
1、登录成功后打开主界面
(1)主画面设置为最大化:
在类向导中找到CMainFrame类,添加ActivateFrame函数,在函数体内添加:
nCmdShow=SW_SHOWMAXIMIZED;
(2)使用新的菜单替换原有菜单
在Menu中插入一个新Menu,设置其中的内容,保存为IDR_MENU1;
在TCU_TQES_V2_0_1.cpp中的BOOL CTCU_TQES_V2_0_1App::InitInstance()中修改代码:
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTCU_TQES_V2_0_1Doc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CTCU_TQES_V2_0_1View));
将IDR_MAINFRAME改为IDR_MENU1。
菜单项依次设置好,并且分配好ID。
(3)不显示工具栏
将MainFrm.cpp中OnCreate中关于Toolbar的代码都注释掉即可。
// pDocTemplate = new CSingleDocTemplate(
// IDR_MENU1,
// RUNTIME_CLASS(CTCU_TQES_V2_0_1Doc),
// RUNTIME_CLASS(CMainFrame), // main SDI frame window
// RUNTIME_CLASS(CTCU_TQES_V2_0_1View));
以及:
// m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
// EnableDocking(CBRS_ALIGN_ANY);
// DockControlBar(&m_wndToolBar);
(4)新建FormView
在资源界面Dialog上点右键,新建一个FormView,命名为IDD_FORMVIEW_SCORE。
打开类向导,提示添加一个新类,命名为CDlg_Score。
(5)在类向导中添加一个新类,命名为CMyFormView,基类是CFormView。在MainFrm.h中#include MyFormView.h。
在CMainFrame类中添加CMyFormView*类型的成员变量m_pView
在CMyFormView中重写create函数
为菜单对应的项添加响应函数:
void CMainFrame::OnScoreView()
{
// TODO: Add your command handler code here
CRect crt;
CCreateContext Cnt;
GetClientRect(crt);
Cnt.m_pCurrentDoc = NULL;
m_pView= new CMyFormView;
m_pView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, crt, this, IDD_FORMVIEW_SCORE1, &Cnt);
m_pView->ShowWindow(SW_SHOW);
}
这样登录之后就进入到空白的主界面中。
2、进行主画面窗口分割
(1)将主画面分为三部分:上方标题、左侧树状目录和右侧主画面
(2)为标题和树状目录新建FormView资源
将原有在CMainFrame::OnCreate()函数中关于载入view的内容删除,在CMainFrame::OnCreateClient中加入如下代码:
if(m_wndSplitter1.CreateStatic(this,2,1)==NULL)
return FALSE;
//将CCreateView连接到0行0列窗格上
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(FCformViewTitle),CSize(100,80), pContext);
//将CView4连接到0行2列
if(m_wndSplitter2.CreateStatic(&m_wndSplitter1,1,2,WS_CHILD|WS_VISIBLE, m_wndSplitter1.IdFromRowCol(1, 0))==NULL)
return FALSE; //将第1行0列再分开1行2列
//将CView2类连接到第二个分栏对象的0行0列
m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CFormViewTree),CSize(150,300),pContext);
//将CView3类连接到第二个分栏对象的0行1列
m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CFormViewMain),CSize(400,300),pContext);
return TRUE;
return CFrameWnd::OnCreateClient(lpcs, pContext);
(3)在Title类中增加成员变量:
CBrush m_brushBackground;
CBitmap bmp;
增加成员函数OnDraw(CDC* pDC) ,并添加以下代码:
bmp.LoadBitmap(IDB_BITMAP_TITLE); ///加载位图
m_brushBackground.CreatePatternBrush(&bmp); ///创建位图画刷
CRect rect;
GetClientRect(rect);///取得客户区域
pDC->FillRect(rect,&m_brushBackground); ///用背景画刷填充区域
效果如下:
3、添加左侧树状目录
(1)在OnCreate函数中加入:
CRect crt=CRect(0, 0, 200, 1000);
m_ctrlTree.Create(WS_CHILD | WS_VISIBLE |TVS_DISABLEDRAGDROP|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_SHOWSELALWAYS, crt, this, 0x285);
return 0;
主要是设置树控件的一些属性
(2)在OnDraw类添加:
HTREEITEM hRoot; // 树的根节点的句柄
HTREEITEM hModItem; // 可表示任一模块节点的句柄
HTREEITEM hFuncItem; // 可表示任一功能节点的句柄
// 插入根节点
m_ctrlTree.DeleteAllItems();
hRoot = m_ctrlTree.InsertItem(_T("主页"), 0, 0);
// 在根节点下插入子节点
hModItem = m_ctrlTree.InsertItem(_T("学生成绩"), 0, 0, hRoot, TVI_LAST);
// 在“学生成绩”节点下插入子节点
hFuncItem = m_ctrlTree.InsertItem(_T("成绩查询"), 0, 0, hModItem, TVI_LAST);
m_ctrlTree.SetItemData(hFuncItem,11);
hFuncItem = m_ctrlTree.InsertItem(_T("成绩录入"), 0, 0, hModItem, TVI_LAST);
m_ctrlTree.SetItemData(hFuncItem,12);
// 在根节点下插入子节点
hModItem = m_ctrlTree.InsertItem(_T("实习实训"), 0, 0, hRoot, TVI_LAST);
// 在“实习实训”节点下插入子节点
hFuncItem = m_ctrlTree.InsertItem(_T("实习实训报表"), 0, 0, hModItem, TVI_LAST);
m_ctrlTree.SetItemData(hFuncItem,21);
// 在根节点下插入子节点
hModItem = m_ctrlTree.InsertItem(_T("科研项目"), 0, 0, hRoot, TVI_LAST);
// 在“科研项目”节点下插入子节点
hFuncItem = m_ctrlTree.InsertItem(_T("项目查询"), 0, 0, hModItem, TVI_LAST);
m_ctrlTree.SetItemData(hFuncItem,31);
hFuncItem = m_ctrlTree.InsertItem(_T("项目录入"), 0, 0, hModItem, TVI_LAST);
m_ctrlTree.SetItemData(hFuncItem,32);
// 在根节点下插入子节点
hModItem = m_ctrlTree.InsertItem(_T("科技竞赛"), 0, 0, hRoot, TVI_LAST);
// 在“科技竞赛”节点下插入子节点
hFuncItem = m_ctrlTree.InsertItem(_T("竞赛查询"), 0, 0, hModItem, TVI_LAST);
m_ctrlTree.SetItemData(hFuncItem,41);
hFuncItem = m_ctrlTree.InsertItem(_T("竞赛录入"), 0, 0, hModItem, TVI_LAST);
m_ctrlTree.SetItemData(hFuncItem,42);
// 在根节点下插入子节点
hModItem = m_ctrlTree.InsertItem(_T("打印报告"), 0, 0, hRoot, TVI_LAST);
// 在“打印报告”节点下插入子节点
hFuncItem = m_ctrlTree.InsertItem(_T("打印报告"), 0, 0, hModItem, TVI_LAST);
m_ctrlTree.SetItemData(hFuncItem,51);
//展开所有节点
ExpandTree(m_ctrlTree.GetRootItem());
m_ctrlTree.SetTextColor(RGB(51,102,153));//设置tree的文字色*/
m_ctrlTree.SetBkColor(RGB(230,230,230));//设置tree的背景色*/
其中定义了一个展开所有节点的函数:
void CFormViewTree::ExpandTree(HTREEITEM hTreeItem)
{
if(!m_ctrlTree.ItemHasChildren(hTreeItem))//如果树控件根节点没有子节点则返回
{
return;
}
HTREEITEM hNextItem = m_ctrlTree.GetChildItem(hTreeItem);//若树控件的根节点有子节点则获取根节点的子节点
while (hNextItem != NULL)//若有
{
ExpandTree(hNextItem);//递归,展开子节点下的所有子节点
hNextItem = m_ctrlTree.GetNextItem(hNextItem, TVGN_NEXT);//获取根节点的下一个子节点
}
m_ctrlTree.Expand(hTreeItem,TVE_EXPAND);//展开节点
}
(3)添加OnSize函数,设置树控件没有滚动条
void CFormViewTree::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
ShowScrollBar(SB_BOTH,FALSE);
}
4、显示主界面信息
将登陆窗口中的用户信息传递到其他类中。这里参考了网上的方法,直接在Stdafx.h中声明extern类型的变量,并在Stdafx.cpp中进行初始化。这样这些变量就成为全局的了。这个方法不是最好的方法,但是比较简单。
Stdafx.h中声明:
extern CString m_Userid;
extern CString m_Role;
extern CString m_Name;
在Dlg_login中的OnOK函数中加入:
m_Userid=m_login_userid;
m_Name=(char*)(_bstr_t)m_pRecordset->GetCollect("USER_NAME");
m_Role = (char*)(_bstr_t)m_pRecordset->GetCollect("ROLE");
目前登录后界面的效果如下:
下一篇:基于MFC和ACCESS的学生综合素质能力评价系统软件开发(4-项目录入)
上一篇:基于MFC和ACCESS的学生综合素质能力评价系统软件开发(2-登录界面)