做一個DreamWeaver風(fēng)格的程序

字號:

---- 用過DreamWeaver的人都會發(fā)現(xiàn)DreamWeaver將每一個編輯的文件顯示在任務(wù)欄上,并且用戶任意關(guān)閉一窗口而不影響其他窗口,好象每一個窗口間沒有關(guān)聯(lián),沒有主窗口似的。但我們也能發(fā)現(xiàn)其實(shí)這些窗口間也有數(shù)據(jù)是共享的,如存盤的路徑。
    ---- 經(jīng)過研究我發(fā)現(xiàn)其實(shí)這些窗口其實(shí)是屬于同一程序的,并且實(shí)現(xiàn)方法也非常的簡單。下面我用Inprise公司的C++ Builder為大家舉一個簡單的例子。
    ---- 首先我們創(chuàng)建一個普通的應(yīng)用程序。在這個程序中包含兩個Form,其中Form1為主窗口,我們將Form2設(shè)為不由應(yīng)用程序自動創(chuàng)建。
    ---- 在Form1中加入一新的Public的屬性:
    ---- int FormCount;
    ---- 此屬性用于記錄系統(tǒng)建立的From2的實(shí)例的個數(shù),在Form1的OnCreate事件中加入如下代碼:
     int i=GetWindowLong(this- >Handle,GWL_STYLE);
     TForm2 *F,*G;
     F=new TForm2(NULL);
     G=new TForm2(NULL);
     F- >ParentWindow=GetDesktopWindow();
     F- >Caption="F";
     G- >ParentWindow=GetDesktopWindow();
     G- >Caption="G";
     this- >FormCount=2;
     SetWindowLong(G- >Handle,GWL_STYLE,i);
     SetWindowLong(F- >Handle,GWL_STYLE,i);
     F- >Show();
     G- >Show();
    ---- 其中GetWindowLong,SetWindowLong為獲取/設(shè)置Window屬性的API函數(shù),具體請看C++ Builder帶的Win32幫助。然后運(yùn)行程序,我們就能發(fā)現(xiàn)程序在任務(wù)欄上顯示了屬于此程序的三個任務(wù)條。
    ---- 接下來我們要做的事情有兩個:
    ---- 1、 隱藏Form1及Application
    ---- 2、 讓Form2的實(shí)例關(guān)閉應(yīng)用程序
    ---- 實(shí)現(xiàn)第一件事情的方法在網(wǎng)上很多地方都提到了,即修改WinMain函數(shù)下面是具體的代碼(粗斜體為加入的代碼):
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
     try
     {
    Application- >Initialize();
    Application- >CreateForm(
    __classid(TForm1), &Form1);
    Application- >ShowMainForm=false;
    ShowWindow(Application- >Handle, SW_HIDE);
    Application- >Run();
    }
    catch (Exception &exception)
    {
    Application- >ShowException(&exception);
    }
    return 0;
    }
    ---- 在這個地方要注意的是光用“Application->ShowMainForm=false;”是不能隱藏主Form(Form1)的,必須將Form1的Visibled屬性變?yōu)閒alse。
    ---- 實(shí)現(xiàn)第二件事情需要用到Application的Terminate方法(結(jié)束應(yīng)用程序)。我們只要在TForm2的OnClose事件中簡單加入以下幾句程序:
     if (Form1- >FormCount>1)
     Form1- >FormCount--;
     else
     Application- >Terminate();
    ---- 運(yùn)行程序,你就能發(fā)現(xiàn)程序在有任務(wù)攔上有兩個提示,窗口F及窗口G,而且這兩個窗口看起來就象獨(dú)立的應(yīng)用程序。
    ---- 至此,一個DreamWeaver風(fēng)格的程序就做完了,是不是很簡單呢。