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

MFC 編寫控制面板擴展程序完整框架與實例

     編輯:關於VC++

控制面板程序特點

  • 本質為 DLL,擴展名必須為 .cpl
  • 導出標準入口 CPlApplet(HWND, UINT, LPARAM, LPARAM)
  • 控制面板啟動時掃描系統目錄 *.cpl,依次加載並發送消息

核心消息流程

封裝框架兩大類

CControlPanelApp

  • 繼承 CWinApp,管理應用列表 m_lsApplets
  • 虛函數 OnInit() 中調用 AddApplet(new CCPApplet(...))

CCPApplet

  • 構造參數:資源 ID + 運行時類 (RUNTIME_CLASS)
  • 自動從字串表讀取名稱/描述(格式:"名稱\n描述\n")
  • OnLaunch 根據類型創建 CDialog 或 CPropertySheet 並 DoModal

實例:MyCtrlPanel 實現雙應用

BOOL CMyControlPanelApp::OnInit() {
    AddApplet(new CCPApplet(IDR_MYAPPLET1, RUNTIME_CLASS(CMyDialog)));
    AddApplet(new CCPApplet(IDR_MYAPPLET2, RUNTIME_CLASS(CMyPropSheet)));
    return CControlPanelApp::OnInit();
}

資源定義:

STRINGTABLE
BEGIN
    IDR_MYAPPLET1 "對話框範例\n演示簡單對話框式控制面板應用\n"
    IDR_MYAPPLET2 "屬性頁範例\n演示多頁籤屬性頁式控制面板應用\n"
END

關鍵實現細節

  • 對話框/屬性頁類必須 DECLARE_DYNCREATE
  • 重寫 OnPostNcDestroy 加入 delete this(堆上創建需手動釋放)
  • m_bDynamic = TRUE 可強制使用 CPL_NEWINQUIRE 避開緩存,調試期建議開啟

部署與調試

  1. 編譯生成 MyCtrlPanel.dll → 重命名 MyCtrlPanel.cpl
  2. 複製至系統目錄 (C:\Windows\System 或 C:\Winnt\System32)
  3. 或在 CONTROL.INI [MMCPL] 段添加路徑映射
  4. 調試:rundll32 shell32.dll,Control_RunDLL MyCtrlPanel.cpl 或指定索引 @n

卸載提示

重啟機器後刪除系統目錄下的 .cpl 文件(謹慎操作,避免誤刪)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
消息用途處理者
CPL_INIT初始化,註冊應用項CControlPanelApp::OnInit
CPL_GETCOUNT返回應用項數量框架自動處理
CPL_INQUIRE / CPL_NEWINQUIRE查詢圖標、名稱、描述CCPApplet::OnInquire / OnNewInquire
CPL_DBLCLK用戶雙擊圖標啟動CCPApplet::OnLaunch
CPL_EXIT釋放資源CControlPanelApp::OnExit