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

制做DreamWeaver風格的程序

編輯:關於C++

---- 用過DreamWeaver的人都會發現DreamWeaver將每一個編輯的文件顯示在任務欄上,並且用戶任意關閉一窗口而不影響其他窗口,好象每一個窗口間沒有關聯,沒有主窗口似的。但我們也能發現其實這些窗口間也有數據是共享的,如存盤的路徑。

---- 經過研究我發現其實這些窗口其實是屬於同一程序的,並且實現方法也非常的簡單。下面我用Inprise公司的C++ Builder為大家舉一個簡單的例子。

---- 首先我們創建一個普通的應用程序。在這個程序中包含兩個Form,其中Form1為主窗口,我們將Form2設為不由應用程序自動創建。

---- 在Form1中加入一新的Public的屬性:

---- int FormCount;

---- 此屬性用於記錄系統建立的From2的實例的個數,在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為獲取/設置Window屬性的API函數,具體請看C++ Builder帶的Win32幫助。然後運行程序,我們就能發現程序在任務欄上顯示了屬於此程序的三個任務條。

---- 接下來我們要做的事情有兩個:

---- 1、 隱藏Form1及Application

---- 2、 讓Form2的實例關閉應用程序

---- 實現第一件事情的方法在網上很多地方都提到了,即修改WinMain函數下面是具體的代碼(粗斜體為加入的代碼):

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屬性變為false。

---- 實現第二件事情需要用到Application的Terminate方法(結束應用程序)。我們只要在TForm2的OnClose事件中簡單加入以下幾句程序:

  if (Form1- >FormCount>1)
      Form1- >FormCount--;
   else
     Application- >Terminate();

---- 運行程序,你就能發現程序在有任務攔上有兩個提示,窗口F及窗口G,而且這兩個窗口看起來就象獨立的應用程序。

---- 至此,一個DreamWeaver風格的程序就做完了,是不是很簡單呢。

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