使用BCB製作控制面版程式 (轉)

worldblog發表於2007-12-29
使用BCB製作控制面版程式 (轉)[@more@]

用BCB開發控制皮膚

  前不久,Inprise公司(原Borland公司)正式公佈了 5.0版,其開發嚮導中支援了“控制皮膚程式(CPL)”的生成,利用它可以、方便地開發CPL程式。那麼是否能在現有的Borland C++ Builder 4.0中開發CPL程式呢?

  CPL程式是動態連結庫(DLL)的一種變形,只不過副檔名為.cpl、入口為CPlApplet()而不是DllEntryPoint()罷了(並不是不要DllEntryPoint(),不然不能編譯)。我們只需在BCB4.0中選擇“File|New...”開啟開發嚮導,選擇“DLL”生成一個DLL框架,並在其中加入一個函式CPlApplet()就可以了。為了快速地說明問題,筆者先給出一個最簡單的例子程式,然後再來解說。

#include
#include
#include
#pragma hdrstop
USERES("my.res");//這是我加入的資源,其中有一個圖示

extern"C" __declspec(dllexport) long CALLBACK __stdcall CPlApplet(HWND hwndCPL,UINT uMsg,LPARAM lParam1,LPARAM lParam2);

int WIN DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
  return 1;
}
long CALLBACK __declspec(dllexport) __stdcall CPlApplet(HWND hwndCPL,UINT uMsg,LPARAM lParam1,LPARAM lParam2)
{
  LPNEWCPLINFO mycpl;//LPNEWCPLINFO結構可在CPL.H標頭檔案中檢視
  long result=0;
  switch (uMsg)//判斷傳來的資訊
  {
  case CPL_INIT:// 第一個資訊,在控制皮膚調入時產生
  result=1;
  break;
  case CPL_GETCOUNT://第二個資訊,在控制皮膚調入時產生
  result=1;
  break;
  case CPL_INQUIRE://第三個資訊,當控制皮膚查詢時產生
  result=0;
  break;
  case CPL_NEWINQUIRE://第三個資訊,當控制皮膚查詢時產生
  mycpl=LPNEWCPLINFO (lParam2);// 將lParam2中的指標傳給mycpl
  mycpl->dwSize=sizeof(NEWCPLINFO);
  mycpl->dwFlags=0;//標誌變數 一般設為0
  mycpl->dwHelpContext=0;//幫助控制程式碼一般設為0
  mycpl->lData=0;
  mycpl->hIcon=(HICON)LoadIcon(HInstance,"MyIcon");
  mycpl->szHelpFile[0]=';//幫助檔案
  StrCopy(mycpl->szName,"BCB控制皮膚演示程式");//在圖示下顯示的說明文字
  StrCopy(mycpl->szInfo,"用BCB開發自己的控制皮膚程式");// 在控制皮膚狀態列中顯示的說明資訊
  result=0;
  break;
  case CPL_LCLK://當圖示被雙擊時
  ShowMessage("這是一個CPL試驗程式");
  result=0;
  break;
  case CPL_STOP://當關閉自已的程式時產生
  result=1;
  break;
  case CPL_EXIT:// 當控制皮膚關閉時產生,使用FreeLibrary()釋放
  result=0;
  break;
  default:
  break;
  }
  return result;
}

  程式解說

  CPL程式的執行流程是基於傳送到程式的一系列訊息。

  當使用者開啟“控制皮膚”的時候,系統將遍歷System目錄下的所有CPL程式,並給它們傳送CPL—INT訊息。這時,CPL程式就可以做一些初始化工作,然後返回非零值,如果返零,程式將被終止。如果CPL—INT訊息處理完成後,CPL程式將接收到CPL—GETCOUNT訊息,此時程式必須返回對話方塊的數目,一般為1。然後,程式又將收到CPL—NEWINQUIRE訊息,此時系統需要CPL程式提供有關資訊,如圖示、說明文字、幫助檔案等,程式必須填充lParam2這個指標指向的資訊結構,然後返回0。到這裡,控制皮膚就完成了初始化,顯示出各個圖示。如果使用者雙擊了某個圖示後,這個圖示所代表的CPL程式將接收到一個CPL—DBCLICK訊息。這時,CPL程式可以顯示出對話介面,進行有關操作。當使用者完成操作、關閉程式時,必須返回0。當使用者關閉“控制皮膚”,此時CPL程式將接收到CPL—STOP訊息,這時就要釋放資源,做好善後工作,然後返回1。 最後CPL程式將接收到最後一個訊息CPL—EXIT,系統將刪除各個視窗,並使用FreeLibrary()函式將CPL程式從系統中刪除,完成整個流程。一般情況下,我們只需要對CPL—NEWINQUIRE和CPL—DBCLICK這兩個訊息進行處理,其它的訊息只要返回預設值就夠了。

  大家只要編譯這個CPL專案,並將結果複製到System目錄下,然後開啟“控制皮膚”就可以看到成果了。雙擊圖示,程式將彈出一個資訊框:“這是一個CPL試驗程式!"。這樣一個CPL程式就完成了。

  如果你想加入更多的功能,只需將CPL—DBCLICK訊息進行處理,比如可以顯示一個視窗進行互動操作。具體的方法與在DLL中加入視窗的方法相同,因為CPL程式本身就是基於DLL框架製作出來的。下圖是筆者做的一個互動視窗:最後,告訴讀者一點技巧:想要輸出.cpl檔案,可在Project|Options...|Application|output settings中將輸出副檔名dll改為cpl就行了。將CPL程式拷入WindowsSystem目錄下後不必開啟“控制皮膚”,直接雙擊檔案就可以開啟這個程式了。而在其它目錄下是沒有作用的。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996116/,如需轉載,請註明出處,否則將追究法律責任。

相關文章