新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 詳解WINCE的控制面板

        詳解WINCE的控制面板

        作者: 時間:2011-02-25 來源:網(wǎng)絡 收藏
        //========================================================================
        //TITLE:
        // 詳解WINCE的控制面板
        //AUTHOR:
        // norains
        //DATE:
        // Tuesday 29-August-2006
        //========================================================================
        曾經(jīng)在我的一篇《控制面板的創(chuàng)建》中介紹過WinCE控制面板的結構,不過由于那篇文章其目的只在于控制面板如何調用EXE程序,故對控制面板也僅是泛泛而談.不過在這篇文章中,我們將對WinCE的使用方法來個整體的詳解.

        1.控制面板的結構
        控制面板其實也是個動態(tài)鏈接庫,區(qū)別只在于后綴名為.cpl,以及對外接口為CPlApplet().
        接口的原型為:
        LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
        在接口函數(shù)中我們需要實現(xiàn)特定幾個消息的響應,控制面板才能正常運作.為方便觀察,在這里直接貼出消息的響應結構:

        // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        // The entry point to the Control Panel application.
        // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        extern "C" LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
        {
        switch (message)
        {
        case CPL_INIT:
        // Perform global initializations, especially memory
        // allocations, here.
        // Return 1 for success or 0 for failure.
        // Control Panel does not load if failure is returned.
        return 1;

        case CPL_GETCOUNT:
        // The number of actions supported by this Control
        // Panel application.
        return 1;

        case CPL_NEWINQUIRE:
        {
        // This message is sent once for each dialog box, as
        // determined by the value returned from CPL_GETCOUNT.
        // lParam1 is the 0-based index of the dialog box.
        // lParam2 is a pointer to the NEWCPLINFO structure.
        return 0; //means CPLApplet succeed
        return 1; // Nonzero value means CPlApplet failed.
        }
        case CPL_DBLCLK:
        {
        // The user has double-clicked the icon for the
        // dialog box in lParam1 (zero-based).
        return 0; // CPlApplet succeed.
        return 1; // CPlApplet failed.
        }

        case CPL_STOP:
        // Called once for each dialog box. Used for cleanup.

        case CPL_EXIT:
        // Called only once for the application. Used for cleanup.

        default:
        return 0;
        }

        return 1; // CPlApplet failed.
        } // CPlApplet

        這幾個消息的作用分別是:
        CPL_INIT:初始化,可以在這分配內(nèi)存等等.
        CPL_GETCOUNT:返回控制面板程序的個數(shù).因為一個.cpl文件中,可能包含多個Applets.
        CPL_NEWINQUIRE:返回包含程序名和圖標信息的NEWCPLINFO結構
        CPL_DBLCLK:雙擊時響應
        CPL_STOP:單個組件退出時響應,用來清除資源內(nèi)存等
        CPL_EXIT:退出整個cpl程序時響應
        這些消息的定義可以在cpl.h中找到


        2.在explorer中使用
        如果定制的系統(tǒng)中帶有explorer UI,只要把編譯好的文件放進"windows",然后再打開"控制面板"就可以看到.


        3.如何調用.cpl
        就像PC機中.dll文件不能直接運行,需要借助rundll32.exe來運行一樣,WinCE下的.cpl也需要相應的程序來調用,這個程序就是:"ctlpnl.exe".
        比如我們需要調用系統(tǒng)自帶的cplmain.cpl的"電源管理",只要在開始菜單的運行中輸入:"ctlpnl.exe windowscplmain.cpl,5".在路徑后面緊跟的"5"只是因為"電源管理"在cplmain.cpl中輸入第五個Applet而已.
        由此我們不難得出在程序中運用ShellExecuteEx()函數(shù)調用控制面板的Applet的方法.以下這段代碼,效果和在命令行中輸入命令一樣,也是調用"電源管理".
        SHELLEXECUTEINFO info;
        TCHAR szControlPanelCmdLine[ 200 ];
        swprintf( szControlPanelCmdLine, L"\windows\cplmain.cpl,5");
        info.cbSize = sizeof( info );
        info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
        info.lpVerb = NULL;
        info.lpFile = TEXT("ctlpnl.exe");
        info.lpParameters = szControlPanelCmdLine;
        info.lpDirectory = NULL;
        info.nShow = SW_SHOW;
        info.hInstApp = NULL;
        ShellExecuteEx( info );

        如果想調用cplmain.cpl的其它Applet,只要把數(shù)字改為相對應的即可.
        以下所列的第一項序號為0,接下的為1,其后的繼續(xù)遞增.
        0 CPL_Comm
        1 CPL_Dialing
        2 CPL_Keyboard
        3 CPL_Password
        4 CPL_Owner
        5 CPL_Power
        6 CPL_System
        7 CPL_Screen
        8 CPL_Mouse
        9 CPL_Stylus
        10 CPL_Sounds
        11 CPL_SIP"
        12 CPL_Remove
        13 CPL_DateTime
        14 CPL_Certs
        15 CPL_Accessib


        4.系統(tǒng)自帶控制面板的代碼
        微軟對控制面板的代碼是完全公開的,如果安裝的是PB4.2,代碼可以在"PUBLICWCESHELLFEOAKCTLPNL"中找到.
        CTLPNL文件夾中有九個文件夾,分別對應不同的CPL文件:
        ADVBACKLIGHT:高級背光燈管理
        BTHPNL:藍牙
        CONNPNL:撥號網(wǎng)絡
        CONTROL:主控制臺,我們在explorer中看到的"控制面板"應該就是這個
        CPLMAIN:會生成cplmain.cpl,控制面板的大多數(shù)選項均源自于此
        CTLPNL:和CONTROL相關聯(lián)的
        DMPNL:沒使用過,不太清楚.不過查看rc文件應該是設置上網(wǎng)的.
        INTL2:區(qū)域和語言設置
        STGUI:存儲器管理

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 利川市| 通海县| 遂川县| 通化县| 江华| 东安县| 台湾省| 绥滨县| 衡阳市| 石棉县| 勃利县| 炎陵县| 柏乡县| 芮城县| 崇义县| 休宁县| 克山县| 广灵县| 交口县| 离岛区| 赤水市| 桂东县| 扎鲁特旗| 淮安市| 都昌县| 昌江| 兴义市| 逊克县| 元江| 德州市| 丰城市| 共和县| 汝州市| 大荔县| 五台县| 勃利县| 莱州市| 贵州省| 大关县| 商南县| 丰台区|