国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用BCB開發控制面板程序

2019-11-17 05:21:32
字體:
來源:轉載
供稿:網友

  前不久,InPRise公司(原Borland公司)正式公布了Delphi 5.0版,其開發向導中支持了“控制面板程序(CPL)”框架的生成,利用它可以快速、方便地開發CPL程序。那么是否能在現有的Borland C++ Builder 中開發CPL程序呢?

  CPL程序是動態鏈接庫(DLL)的一種變形,只不過擴展名為.cpl、入口函數為CPlApplet()而不是DllEntryPoint()罷了(并不是不要DllEntryPoint(),不然不能編譯)。我們只需在BCB4.0中選擇“FileNew...”打開開發向導,選擇“DLL”生成一個DLL框架,并在其中加入一個函數CPlApplet()就可以了。為了快速地說明問題,筆者先給出一個最簡單的例子程序,然后再來解說。

#include <vcl.h>
#include <cpl.h>
#include <cplext.h>
#pragma hdrstop
USERES("my.res");//這是我加入的資源文件,其中有一個圖標

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

int WINAPI 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]='/0';//幫助文件
    StrCopy(mycpl->szName,"BCB控制面板演示程序");//在圖標下顯示的說明文字
    StrCopy(mycpl->szInfo,"用BCB開發自己的控制面板程序");// 在控制面板狀態欄中顯示的說明信息
    result=0;
    break;
  case CPL_DBLCLK://當圖標被雙擊時
    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項目,并將結果拷貝到Windows/System目錄下,然后打開“控制面板”就可以看到成果了。雙擊圖標,程序將彈出一個信息框:“這是一個CPL試驗程序!"。這樣一個CPL程序就完成了。

  假如你想加入更多的功能,只需將CPL—DBCLICK消息進行處理,比如可以顯示一個窗口進行交互操作。具體的方法與在DLL中加入窗口的方法相同,因為CPL程序本身就是基于DLL框架制作出來的。下圖是筆者做的一個交互窗口:最后,告訴讀者一點技巧:想要編譯器輸出.cpl文件,可在ProjectOptions...applicationoutput settings中將輸出擴展名dll改為cpl就行了。將CPL程序拷入Windows/System/目錄下后不必打開“控制面板”,直接雙擊文件就可以打開這個程序了。而在其它目錄下是沒有作用的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 射阳县| 凌源市| 安图县| 固镇县| 太原市| 博乐市| 射洪县| 临海市| 湟源县| 台中市| 保定市| 浑源县| 吴桥县| 扶余县| 承德县| 彰化县| 琼结县| 莱阳市| 鹿泉市| 白玉县| 溧水县| 玉屏| 新乐市| 交口县| 上饶县| 西宁市| 贡山| 祥云县| 渭源县| 岢岚县| 深水埗区| 类乌齐县| 迁西县| 西充县| 平顶山市| 泰宁县| 仁寿县| 奉节县| 深泽县| 深泽县| 商洛市|