日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

WinCE 控制面板的创建

發(fā)布時(shí)間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinCE 控制面板的创建 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

控制面板的組件,其實(shí)就是一個(gè)地地道道的DLL文件,所不同的是其后綴名為.CPL而已.控制面板組件對(duì)外必須要實(shí)現(xiàn)一個(gè)CPlApplet接口,其原型為:LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2).而在此函數(shù)之中,為了使組件正常運(yùn)作,我們必須要處理如下消息:CPL_INIT(初始化,可以在這分配內(nèi)存等等),CPL_GETCOUNT(顯示的組件數(shù)目),CPL_NEWINQUIRE(獲取組件的信息,才能正常顯示),CPL_DBLCLK(雙擊圖標(biāo)時(shí)執(zhí)行).
為方便觀看,將此函數(shù)體列出:

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// 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

組件要進(jìn)行相關(guān)操作,一般在.cpl文件內(nèi)部進(jìn)行操作;但我們完全可以把.CPL文件當(dāng)成一個(gè)外殼,其作用只是在"控制面板"中顯示一個(gè)圖標(biāo),真正的處理是調(diào)用另外一個(gè)EXE文件.這樣的好處是,此.CPL代碼通用性強(qiáng),如果想再添加別的組件,只要更改.CPL少量代碼;并且,功能模塊的分離,使得我們?nèi)绻南嚓P(guān)功能,也只要修改相應(yīng)的EXE文件,調(diào)試也更加方便.

現(xiàn)在就讓我們看一下如何在控制面板中調(diào)用EXE文件.
我們需要的是,在控制面板中雙擊我們顯示的圖標(biāo)就調(diào)用我們相應(yīng)的EXE程序;很顯然,我們只需要在CPL_DBLCLK消息中添加調(diào)用代碼即可.
extern "C"? LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
{
? switch (message)
? ?
? ?....
????
??? case CPL_DBLCLK:
??{
???//-----------------------------------------------------------------
???//關(guān)于FindWindow函數(shù)的說(shuō)明:
???//原型:HWND FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName);?
???//lpClassName:要賦的值是類的字符串名稱,在ce下可以運(yùn)行Remote Spy++進(jìn)行查看;在本例子中采用此工具看到的是"Dialog".
???//此參數(shù)也可以為NULL,前提是所有在運(yùn)行的窗口標(biāo)題不同
???//lpWindowName:窗口的標(biāo)題字符串名稱,也即是我們可以看到的窗口標(biāo)題???
???//------------------------------------------------------------------
???//由于我們的這個(gè)exe文件只有一個(gè)窗口,下面這個(gè)函數(shù)也可以這樣寫(xiě)FindWindow (NULL,TEXT("背光調(diào)節(jié)"))
???HWND hWnd = FindWindow (L"Dialog",TEXT("背光調(diào)節(jié)"));?
???if (hWnd)?
???{???????
????//如果已經(jīng)運(yùn)行過(guò)一個(gè)實(shí)例,則把它提到窗口前
????SetForegroundWindow (hWnd);
????CloseHandle(hWnd);
????return 0;???
???}
???else
???{
????//調(diào)用exe文件.
????if (CreateProcess(_T("\\Windows\\Backlight.exe"), NULL, NULL,NULL, FALSE, 0, NULL, NULL, NULL, &pi))
????{
?????CloseHandle(pi.hThread);
?????CloseHandle(pi.hProcess);
?????return 0;
????}
???}
???return 1;???? // CPlApplet failed.
??}
??
??....
??
}


總結(jié)

以上是生活随笔為你收集整理的WinCE 控制面板的创建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。