程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 數據庫開發之窗體編程

數據庫開發之窗體編程

編輯:關於VC++

在很多管理信息系統的窗體都有一些共同點:可以通過框架菜單打開各種類型的視圖窗口,而這些視圖窗口具有MDI的一些特點,可以在框架窗體中最小化最大化還原等,並且點擊菜單只能產生一個窗口(象SDI)。這種形式的窗口設計給人與一種條理感。於是我用VC6.0嘗試創建這種窗口,現將整個過程為大家寫下來,這裡應含有MFC的一些內幕技術。

一、新建AppWizad(exe)工程,名為mdisdi,基於MDI的文檔視模式(其余默認)。

二、在CApp子類中添加如下代碼:

public:
  CMultiDocTemplate* pDoctemp1;
  CMultiDocTemplate* pDoctemp2;

三、修改InitInstance()中將如下代碼:

CMultiDocTemplate* pDocTemplate;
  pDocTemplate = new CMultiDocTemplate(
    IDR_MDISDITYPE,
    RUNTIME_CLASS(CMdisdiDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CMdisdiView));
  AddDocTemplate(pDocTemplate);
改為:

//CMultiDocTemplate* pDocTemplate;//刪除
    pDoctemp1 = new CMultiDocTemplate(
    IDR_MDISDITYPE,
    RUNTIME_CLASS(CMdisdiDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CMdisdiView));
   AddDocTemplate(pDoctemp1);

四、加入新類CDoc2,基類為CDocument(利用菜單Insert-New Class…讓其自動生成即可);加入新框架類CChildFrame2,基類為CMDIChildWnd;

加入新視類,這裡新加CView2基類為CFormView類(Insert-New Form…),注意在添加對話框中將Document選為CDoc2;

五、同(三)將如下代碼:

CMultiDocTemplate* pNewDocTemplate = new CMultiDocTemplate(
        IDR_VIEW2_TMPL, 
    RUNTIME_CLASS(CDoc2), // document class
    RUNTIME_CLASS(CMDIChildWnd), // frame class
    RUNTIME_CLASS(CView2)); // view class
   AddDocTemplate(pNewDocTemplate);

改為:

pDoctemp2 = new CMultiDocTemplate(
      IDR_VIEW2_TMPL, 
    RUNTIME_CLASS(CDoc2), // document class 
     RUNTIME_CLASS(CChildFrame2), // frame class 
      RUNTIME_CLASS(CView2)); // view class 
   AddDocTemplate(pDoctemp2);
並在mdisdi.cpp頭部添加:

#include "Doc2.h"

六、修改IDR_MAINFRAME菜單,新添一菜單“功能”,其子菜單為窗口1和窗口2.用ctrl+c復制,ctrl+v粘貼,產生二個新菜單IDR_MAINFRAME1和IDR_MAINFRAME2,再將其更名為IDR_MDISDITYPE,IDR_VIEW2_TMPL.

七、為IDR_MAINFRAME菜單新添菜單增加消息應射函數OnMenuitem32771()和OnMenuitem32772()

八、在MainFrm.h加入:

#include "mdisdiDoc.h"
  #include "Doc2.h"
並在類中添加:

public:
  CMdisdiDoc * pDoc1;
  CDoc2 * pDoc2;
在MainFrm.cpp增加代碼如下:

void CMainFrame::OnMenuitem32771() 
  {
  // TODO: Add your command handler code here
    if(pDoc1==NULL)
   {
    CMdisdiApp * pmdisdiapp =(CMdisdiApp *)AfxGetApp();
    pDoc1=(CMdisdiDoc *)
    pmdisdiapp->pDoctemp1->OpenDocumentFile(NULL);
    }
    else
   {
    POSITION pos;
    pos=pDoc1->GetFirstViewPosition();
    CView * pView;
    pView=pDoc1->GetNextView(pos);
    pView->GetParentFrame()->ActivateFrame();
   }
  }
 void CMainFrame::OnMenuitem32772() 
 {
    if(pDoc2==NULL)
   { 
    CMdisdiApp * pmdisdiapp =(CMdisdiApp *)AfxGetApp();
    pDoc2=(CDoc2 *)
    pmdisdiapp->pDoctemp2->OpenDocumentFile(NULL);
   }
    else
   {
    POSITION pos;
    pos=pDoc2->GetFirstViewPosition();
    CView * pView;
    pView=pDoc2->GetNextView(pos);
    pView->GetParentFrame()->ActivateFrame();
   }
 }

九、在MainFrm.cpp添加如下代碼:

CMainFrame::CMainFrame()
 {
   pDoc1=NULL;
   pDoc2=NULL;
 }

在ChildFrm.cpp中添加:

#include "MainFrm.h"

和如下代碼:

CChildFrame::~CChildFrame()
 {
  CMainFrame * pmainwnd=
      (CMainFrame *)AfxGetMainWnd();
  pmainwnd->pDoc1=NULL;
 }

在ChildFrame2.cpp中添加:

#include "MainFrm.h"

和如下代碼:

CChildFrame2::~CChildFrame2()
 {
  CMainFrame * pmainwnd=
      (CMainFrame *)AfxGetMainWnd();
  pmainwnd->pDoc2=NULL;
 }

最後將InitInstance()中如下幾行注釋掉:

CCommandLineInfo cmdInfo;
  ParseCommandLine(cmdInfo);
  // Dispatch commands specified on the command line
  if (!ProcessShellCommand(cmdInfo))
  return FALSE;

作用是去掉新建選擇視類對話框;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved