VC++60 第十五章 多文檔界面的程序

第十五章 多文檔界面的程序

 

上一章我們介紹了單文檔的程序,它只能打開一個文檔進行編輯,要編輯或查看另一文檔,當前文檔就被關閉了。多文檔的應用程序象WORD,VC++本身等,都可以同時打開多個文檔進行操作。本章介紹創建多文檔程序的基本方法。

本章要點

1 創建一個多文檔的應用程序
2 字符串表和修改文件對話框的過濾
3 創建和修改工具條

 

15.1 MCircle程序的界面和功能

 

我們先來建立一個多文檔應用程序MCircle,它的功能和上一章的Circle程序一樣,按一下鼠標就畫一個圓。只是它可以打開多個文檔,也可以把同一個文檔打開多次。

創建工程
打開應用程序嚮導,在d:\myVC\CH15創建應用程序MCircle。選擇“多文檔”,注意選擇“工具條和狀態欄支持”,最後一步視圖基類選擇CView。程序運行時的界面如圖chap15-01所示。

VC++60 <wbr> <wbr>第十五章 <wbr>多文檔界面的程序
圖chap15-01

圖中打開了兩個文檔,MCircle2 是當前文檔,所以在主窗口的標題這形式了“ MCircle --MCircle2”。每個子窗口的大小都可以改變,菜單條中有一個“窗口”菜單,可以對多個窗口進行排列和選擇。文件菜單中有打印功能,那是在創建工程時用戶自己選的。還可以保存4-10個“最近打開的”文檔,這也是在在創建工程時由用戶自己選定。當鼠標停留在菜單項或工具圖標上時,右下角的狀態欄會顯示它們的功能說明。在打開文件時,對話框中的文件類型會顯示(*.Cir),這是我們要設置的。

 

15.2 編寫代碼

 

爲了畫圓,需要在文檔和視圖類中引進表示圓心和半徑的變量 m_PosX、m_PosY和m_Reduse,在他們的構造函數中定義,在OnInitialUpdate()中初始化。在OnDraw()函數中畫圓,添加鼠標點擊消息並加入畫圓的代碼。各代碼清單如下:

1)在MCircleView.h文件的構造函數中
// Implementation
public:
    int m_PosX;
    int m_PosY;
    int m_Reduse;

    virtual ~CMCircleView();

2)
void CMCircleView::OnInitialUpdate()
{
    CView::OnInitialUpdate();
    // TODO: Add your specialized code here and/or call the base class
    CMCircleDoc *pDoc = GetDocument();
    m_PosX = pDoc->m_PosX;
    m_PosY = pDoc->m_PosY;
    m_Reduse = pDoc->m_Reduse;
}

3)
void CMCircleView::OnDraw(CDC* pDC)
{
    CMCircleDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here

    RECT rect;
    rect.left = m_PosX - m_Reduse ;
    rect.top = m_PosY - m_Reduse ;
    rect.right = m_PosX + m_Reduse ;
    rect.bottom= m_PosY + m_Reduse ;
    pDC->Ellipse(&rect);
}

4)
void CMCircleView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    m_PosX = point.x;
    m_PosY = point.y;
    Invalidate();

    CMCircleDoc *pDoc = GetDocument();
    pDoc->m_PosX = m_PosX;
    pDoc->m_PosY = m_PosY;
    pDoc->m_Reduse = m_Reduse ;
    pDoc->SetModifiedFlag(TRUE);
    // my code END
    CView::OnLButtonDown(nFlags, point);
}

保存、編譯和運行,就可以看到如圖01所示的程序了。

 

15.3 字符串表的修改

 

打開工作區的resource頁的String Table,就可以看到字符串表String Table,雙擊它打開一個字符串表如下圖chap15-02所示:

VC++60 <wbr> <wbr>第十五章 <wbr>多文檔界面的程序
圖chap15-02

其中儲存着程序程序中使用到的字符串。例如圖中高亮顯示的行是“文件/打開”菜單的ID,字符串的值爲“打開一個現有文件\n打開”,前一半是當鼠標停留在“文件/打開”菜單項或對應的工具圖標上時在狀態欄中顯示的提示信息,後一半是在鼠標箭頭下的彈初出信息,中間用"\n"分隔。

第二行是IDR_MCIRCLTYPE,其值爲129,字符串=“MCircle 程序\nMCircle\nMCircle\nCIR Files{*.Cir)\n.cir\nMCircle.Document\nMCircle Document”,它包括應用程序窗口顯示的標題,打開文件對話框時的缺省擴展名等7個子字符串。

1)MCircle 程序        應用程序主窗口標題
2)\nMCircle            子窗口的文件名
3)\nMCircle
4)\nCIR Files{*.Cir)    “另存爲”文件對話框的缺省擴展名
5)\n.cir                  “打開”文件對話框的缺省擴展名
6)\nMCircle.Document
7)\nMCircle Document

按上面的內容修改後編譯和運行,再創建新文件看看。在保存文件和打開文件時,就會過濾掉其他文件,只顯示*.Cir文件。

VC++60 <wbr> <wbr>第十五章 <wbr>多文檔界面的程序
圖chap15-03

 

15.4 工具條的修改編輯

 

圖01中工具條是嚮導自己創建的標準工具條,打開工作區的資源頁,展開ToolBar,就可以看到ID爲IDR_MAINFRAMED的工具條。雙擊它,就會打開一個圖標編輯器,可以讓用戶編輯和修改工具條。如圖chap10-04所示

VC++60 <wbr> <wbr>第十五章 <wbr>多文檔界面的程序
圖chap10-04

如圖形工具和顏色工具窗口沒有打開,可以用右鍵點用戶區的底部,選擇你所需要的窗口打開它。現在我們來增加一個顏色工具,設計爲如下的3×3正方形。
VC++60 <wbr> <wbr>第十五章 <wbr>多文檔界面的程序 
保存後我們還需要條加一個“顏色”菜單,其中添加一個菜單項“選擇"顏色,它將打開一個顏色對話框用來設置畫圓顏色。菜單和工具的ID必須是相同的,這才能保證它們都用同一個事件響應函數。雙擊工具條中某一個的圖標,就可以打開改根據的屬性對話框,修改ID,並設置它的提示字符串。這些工作,留給讀者作
爲練習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章