国产探花免费观看_亚洲丰满少妇自慰呻吟_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/目錄下后不必打開“控制面板”,直接雙擊文件就可以打開這個程序了。而在其它目錄下是沒有作用的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大埔区| 汉中市| 宜川县| 丘北县| 常熟市| 吉安县| 临安市| 徐水县| 云龙县| 卫辉市| 探索| 昌邑市| 天津市| 孟连| 华阴市| 吉林省| 阜康市| 凤凰县| 灵丘县| 岚皋县| 顺平县| 孟村| 璧山县| 罗平县| 新和县| 辛集市| 广元市| 呼伦贝尔市| 武穴市| 平乐县| 聊城市| 新干县| 绥德县| 张家港市| 大同县| 丰县| 龙井市| 新兴县| 贡觉县| 射洪县| 永安市|