首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Borland C++ Builder 開發控制面板程式 (CPL) 完整指南

     編輯:關於C++

Delphi 5.0 內建 CPL 專案範本,但 C++ Builder 同樣能輕鬆開發控制面板程式。CPL 本質是特殊的 DLL:副檔名為 .cpl,進入點為 CPlApplet() 而非 DllEntryPoint()(但仍需保留 DllEntryPoint 以通過編譯)。本文示範在 BCB 4.0 中從 DLL 專案轉製 CPL 的完整流程。

最小化 CPL 程式碼範例

#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;
    long result = 0;

    switch (uMsg) {
        case CPL_INIT:       // 控制面板載入時首個訊息
            result = 1;      // 非零表示繼續載入
            break;

        case CPL_GETCOUNT:   // 詢問程式圖示數量
            result = 1;      // 本例僅一個圖示
            break;

        case CPL_INQUIRE:    // 舊版查詢介面(Win95 兼容)
            result = 0;
            break;

        case CPL_NEWINQUIRE: // 新版查詢介面(Win95 OSR2+、NT 4.0+)
            mycpl = (LPNEWCPLINFO)lParam2;
            mycpl->dwSize = sizeof(NEWCPLINFO);
            mycpl->dwFlags = 0;
            mycpl->dwHelpContext = 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;
    }
    return result;
}

CPL 訊息流程詳解

  1. CPL_INIT:控制面板開啟時發送,執行初始化,返回非零繼續。
  2. CPL_GETCOUNT:返回圖示數量(通常為 1)。
  3. CPL_NEWINQUIRE:填充 NEWCPLINFO 結構(圖示、名稱、說明、說明檔等),返回 0。
  4. 控制面板顯示圖示,使用者雙擊觸發 CPL_DBLCLK,此處可彈出對話框進行互動。
  5. 使用者關閉對話框 → CPL_STOP:釋放資源,返回 1。
  6. 控制面板關閉 → CPL_EXIT:系統釋放 DLL。

一般僅需處理 CPL_NEWINQUIRE 與 CPL_DBLCLK,其他返回預設值即可。

進階:在 CPL 中嵌入完整視窗介面

CPL 基於 DLL 架構,在 CPL_DBLCLK 中建立並顯示 TForm 衍生類別實例,即可實現豐富的設定介面。方法與一般 DLL 中使用 VCL 視窗相同,需注意:

  • 在專案選項 Application → Output settings 中將輸出副檔名從 dll 改為 cpl。
  • 編譯產生的 .cpl 檔複製到 Windows\System 目錄(或 System32),雙擊即可直接運行,無需開啟控制面板。

資源檔準備

使用 Image Editor 建立 .res 資源檔,包含名為 MyIcon 的圖示資源,專案中以 USERES("my.res") 引入。

測試與部署

  1. 編譯專案產生 my.cpl。
  2. 複製至 C:\Windows\System(Win9x)或 C:\Windows\System32(NT 系列)。
  3. 開啟控制面板,即可見到自訂圖示與名稱。
  4. 雙擊圖示彈出訊息框,驗證功能正常。

經驗證,此方法在 Win2000 SP2 + C++ Builder 6 環境下成功運行。掌握 CPL 開發,能為系統管理工具、硬體配置程式提供原生整合體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved