程序分析--
存取记录,利用数据库是个好方法,因为项目较小就用Access吧
显示方式,初步设计了下,决定用类似chm文件的显示方式,在左边用树型进行选择,右边用edit和RichEdit来就行编辑
功能方法,对数据库能添加记录,更新记录,删除记录。对显示能改变字体颜色,大小,格式等。
程序实现--
初步设想--利用MFC产生的单文档,构造CIndexView和CContentView分别来进行选择和显示。其中CIndexView派生自CTreeView,CContentView派生自CFormView,在其关联的对话框中用工具箱添加Edit和RichEdit控件。
分布实现--
1.文档结构
利用CSplitterWnd重载个分割条CSplitterWndEx,限制分割条的移动范围。
添加OnMouseMove消息
- void CSplitteEx::OnMouseMove(UINT nFlags, CPoint point)
- {
- // 限制切分条的运动范围。
- if( point.x<200||point.x>600 )
- {
- CWnd::OnMouseMove(nFlags, point);
- }
- else
- {
- CSplitterWnd::OnMouseMove(nFlags, point);
- }
- }
这样就限制了分割条的移动范围了。
再在主框架中设置分割窗口信息
- BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
- CCreateContext* pContext)
- {
- if( !m_wndSplitter.CreateStatic(this, 1, 2) ||
- !m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CIndexView), CSize(250, 10), pContext) ||
- !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CContentView), CSize(10, 10), pContext) )
- return FALSE;
- return TRUE;
- }
好了,现在就可以编译出现个基本框架了。
2.工具条优化
准备定制好的BMP图片若干(利用了Windows自带的画图程序把PNG格式的图片转换成了BMP图片,大小是64*64的)
重载CToolBar,提供InitImage(CString strPath,int nCount)方法,其中strPath是存储图片的文件夹的路径,nCount是图片数目.
添加WM_CREATE消息
- int CToolBarEx::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CToolBar::OnCreate(lpCreateStruct) == -1)
- return -1;
- InitImage(); //初始化Image
- GetToolBarCtrl().SetImageList(&m_iImage); // 设置ImageList
- return 0;
- }
其中InitImage函数为
- void CToolBarEx::InitImage()
- {
- m_iImage.Create(64,64,ILC_COLOR32 | ILC_MASK,0,0);
- CString strText;
- for(int i=0; i<m_nCountImage; ++i)
- {
- strText.Format(m_strPath+_T("//%d.bmp"),i+1); // 图片的名称
- HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,strText,IMAGE_BITMAP,LR_DEFAULTSIZE,LR_DEFAULTSIZE,LR_LOADFROMFILE);
- if( hBitmap!=NULL )
- {
- m_vecBitmap.push_back(hBitmap); // 存储句柄,在析构函数中销毁句柄
- CBitmap bmp;
- bmp.Attach(hBitmap);
- m_iImage.Add(&bmp,RGB(0,0,0));
- }
- }
- }
还可以设置工具条在浮动的时候取消关闭按钮
- void CToolBarEx::OnMove(int x, int y)
- {
- CToolBar::OnMove(x, y);
- // TODO: 在此处添加消息处理程序代码
- if( IsFloating() )
- {
- if( m_pDockBar ) // m_pDockBar指向停靠的窗口对象
- {
- // 如果停靠窗口是 CMiniFrameWnd就去掉系统菜单
- // 在IsFloating函数为FALSE的时候这个m_pDockBa的父窗口就是主框架
- CWnd *pWnd=m_pDockBar->GetParent();
- if( pWnd->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)) )
- {
- pWnd->ModifyStyle(WS_SYSMENU,0);
- }
- }
- }
- }
最后,在主框架创建工具条之前设置参数
- void CToolBarEx::SetInfo(CString strPath,int nCount)
- {
- // 设置添加图片和路径
- m_nCountImage =nCount;
- m_strPath =strPath;
- m_vecBitmap.reserve(nCount);
- }
同时,需要改变ToolBar的高度和宽度,设置到相应的64像素。