NoteBook开发手记(一)

来源:互联网 发布:sqlserver数据库收缩 编辑:程序博客网 时间:2024/05/17 04:46

     程序分析--

                        存取记录,利用数据库是个好方法,因为项目较小就用Access吧

                        显示方式,初步设计了下,决定用类似chm文件的显示方式,在左边用树型进行选择,右边用edit和RichEdit来就行编辑

                        功能方法,对数据库能添加记录,更新记录,删除记录。对显示能改变字体颜色,大小,格式等。

 

 

    程序实现--

            初步设想--利用MFC产生的单文档,构造CIndexView和CContentView分别来进行选择和显示。其中CIndexView派生自CTreeView,CContentView派生自CFormView,在其关联的对话框中用工具箱添加Edit和RichEdit控件。

 

            分布实现--

1.文档结构

    利用CSplitterWnd重载个分割条CSplitterWndEx,限制分割条的移动范围。

 添加OnMouseMove消息

  1. void CSplitteEx::OnMouseMove(UINT nFlags, CPoint point)
  2. {
  3.  // 限制切分条的运动范围。  
  4.  if( point.x<200||point.x>600 ) 
  5.  { 
  6.   CWnd::OnMouseMove(nFlags, point); 
  7.  } 
  8.  else 
  9.  { 
  10.   CSplitterWnd::OnMouseMove(nFlags, point); 
  11.  } 
  12. }

这样就限制了分割条的移动范围了。

再在主框架中设置分割窗口信息


 

  1. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
  2.  CCreateContext* pContext)
  3. {
  4.  if( !m_wndSplitter.CreateStatic(this, 1, 2) ||
  5.    !m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CIndexView), CSize(250, 10), pContext) ||
  6.    !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CContentView), CSize(10, 10), pContext) )
  7.    return FALSE;
  8.  return TRUE;
  9. }

好了,现在就可以编译出现个基本框架了。

 

2.工具条优化

准备定制好的BMP图片若干(利用了Windows自带的画图程序把PNG格式的图片转换成了BMP图片,大小是64*64的)

重载CToolBar,提供InitImage(CString strPath,int nCount)方法,其中strPath是存储图片的文件夹的路径,nCount是图片数目.

添加WM_CREATE消息

  1. int CToolBarEx::OnCreate(LPCREATESTRUCT lpCreateStruct)
  2. {
  3.  if (CToolBar::OnCreate(lpCreateStruct) == -1)
  4.   return -1;
  5.  InitImage();                                                            //初始化Image
  6.  GetToolBarCtrl().SetImageList(&m_iImage);        // 设置ImageList
  7.  return 0;
  8. }

其中InitImage函数为

  1. void CToolBarEx::InitImage()
  2. {
  3.  m_iImage.Create(64,64,ILC_COLOR32 | ILC_MASK,0,0);
  4.  CString strText;
  5.  for(int i=0; i<m_nCountImage; ++i)
  6.  {
  7.   strText.Format(m_strPath+_T("//%d.bmp"),i+1);        // 图片的名称
  8.   HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,strText,IMAGE_BITMAP,LR_DEFAULTSIZE,LR_DEFAULTSIZE,LR_LOADFROMFILE);
  9.   
  10.   if( hBitmap!=NULL )
  11.   {
  12.    m_vecBitmap.push_back(hBitmap);                            // 存储句柄,在析构函数中销毁句柄
  13.    CBitmap bmp;
  14.    bmp.Attach(hBitmap);
  15.    m_iImage.Add(&bmp,RGB(0,0,0));
  16.   }
  17.  }
  18. }

还可以设置工具条在浮动的时候取消关闭按钮

  1. void CToolBarEx::OnMove(int x, int y)
  2. {
  3.  CToolBar::OnMove(x, y);
  4.  // TODO: 在此处添加消息处理程序代码
  5.  if( IsFloating() )
  6.  {
  7.   if( m_pDockBar )  // m_pDockBar指向停靠的窗口对象
  8.   {
  9.    // 如果停靠窗口是 CMiniFrameWnd就去掉系统菜单
  10.    // 在IsFloating函数为FALSE的时候这个m_pDockBa的父窗口就是主框架
  11.    CWnd *pWnd=m_pDockBar->GetParent();
  12.    if( pWnd->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)) )
  13.    {
  14.     pWnd->ModifyStyle(WS_SYSMENU,0);
  15.    }
  16.   }
  17.  }
  18. }

最后,在主框架创建工具条之前设置参数

  1. void CToolBarEx::SetInfo(CString strPath,int nCount)
  2. {
  3.  // 设置添加图片和路径
  4.  m_nCountImage =nCount;
  5.  m_strPath  =strPath;
  6.  m_vecBitmap.reserve(nCount);
  7. }

同时,需要改变ToolBar的高度和宽度,设置到相应的64像素。

 

 

原创粉丝点击