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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinCE控制面板添加应用程序

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinCE控制面板添加应用程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WinCE系統中的控制面板和Windows系統中的控制面板原理是一樣的,里面就是包含了一些應用程序。WinCE系統的控制面板由Ctlpnl.exe,Control.exe和一些.cpl文件組成,其中Ctlpnl.exe和Control.exe用于控制控制面板的文件夾顯示和架構,而.cpl文件和控制面板中的實際應用程序相對應。

?

WinCE的控制面板中的每個應用程序都由兩部分組成:應用程序本身和所對應的.cpl文件。實際上.cpl文件就是一個dll,在該dll中會導出CPLApplet函數,該函數會處理來自控制面板的消息(CPL_INIT, CPL_DBCLK, CPL_STOP等),然后根據相應的消息來調用應用程序。

?

先來看一下CPlApplet函數,如下:

LONG CPlApplet(HWND hwndCPl, UINT msg, LPARAM lParam1, LPARAM lParam2)

hwndCPl:控制面板窗口的句柄

msg:發給控制面應用程序的消息

lParam1:消息參數1

lParam2:消息參數2

?

該函數會根據msg參數傳入的消息進行相應的處理,WinCE中所支持的控制面板消息如下:

CPL_INIT:被首次加載的時候會收到該消息,也是第一個消息,用于初始化控制面板應用程序,比如內存分配等。

CPL_GETCOUNT:第二個被收到的消息,該消息用于獲得該控制面板應用程序中的組件數,因為.cpl文件中可能包含多個Applet程序。

CPL_NEWINQUIRE:查詢組件信息,如果該.cpl中包含多個組件,那么lParam1表示組件號,lParam2是一個指向NEWCPLINFO結構的指針,其中NEWCPLINFO結構用于描述組件信息。

CPL_DBCLK:用戶在控制面板界面中雙擊某個應用時,會收到該消息,在該消息中執行對應的應用程序。如果包含多個組件,那么lParam1表示組建號,lParam2為傳給應用程序的數據。

CPL_STOP:關閉控制面應用程序時,收到該消息,用于釋放資源。如果包含多個組件,那么lParam1表示組件號,lParam2為傳給應用程序的數據。

CPL_EXIT:在CPL_STOP消息之后,控制面板釋放該應用程序時,收到該消息。

?

在CPlApplet中收到CPL_NEWINQUIRE消息時,會初始化NEWCPLINFO結構來描述組件信息,該結構定義如下:

typedef struct tagNEWCPLINFO {

? DWORD dwSize;

? DWORD dwFlags;

? DWORD dwHelpContext;

? LONG lData;

? HICON hIcon;

? TCHAR szName[32];

? TCHAR szInfo[64];

? TCHAR szHelpFile[128];

} NEWCPLINFO;

?

dwSize:該結構的信息

dwFlags:忽略

dwHelpContext:忽略

lData:傳給組建程序的數據

hIcon:顯示在控制面板中的圖標的句柄

szName:顯示在控制面板中的組件的名字

szInfo:顯示在控制面板中的描述信息

szHelpFile:忽略

?

?

前面介紹了控制面板的基礎知識,下面就開始添加應用程序到WinCE控制面板中,步驟如下:

1. 創建一個WinCE的工程,然后添加一個應用程序:

首先要有一個WinCE的工程,然后點擊File->New->Subproject,然后選擇WCE Application,然后可以選擇Hello World應用程序。

?

2. 為應用程序創建CPL工程:

同樣點擊File->New->Subproject,然后選擇WCE Dynamic-Link Library,工程名為HelloCPL,然后點擊Next,在Auto-generated subproject files頁面中選擇A Dll that exports some symbols,然后點擊Finish完成。

?

3. 添加CPlApplet函數:

打開HelloCPL工程,并打開HelloCPL.cpp文件,添加如下頭文件:

#include <tchar.h>

#include “cpl.h”

?

然后添加如下代碼:

#define lengthof(exp) ((sizeof((exp)))/sizeof((*(exp))))

?

HMODULE g_hModule = NULL;?? // Handle to the DLL.

?

?

BOOL APIENTRY DllMain( HANDLE hModule,

DWORD? ul_reason_for_call,

LPVOID lpReserved

)

{

??? switch (ul_reason_for_call)

??? {

??????? case DLL_PROCESS_ATTACH:

??????????????????????? {

??????????????????????????????????? g_hModule = (HMODULE) hModule;

??????????????????????? }

??????? case DLL_THREAD_ATTACH:

??????? case DLL_THREAD_DETACH:

??????? case DLL_PROCESS_DETACH:

??????????? break;

??? }

??? return TRUE;

}

?

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

// The entry point to the Control Panel application.

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

extern "C" HelloCPL_API 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.

??? {

????? ASSERT(0 == lParam1);

????? ASSERT(lParam2);

?

????? NEWCPLINFO* lpNewCplInfo = (NEWCPLINFO *) lParam2;

????? if (lpNewCplInfo)

????? {

???????? lpNewCplInfo->dwSize = sizeof(NEWCPLINFO);

???????? lpNewCplInfo->dwFlags = 0;

???????? lpNewCplInfo->dwHelpContext = 0;

???????? lpNewCplInfo->lData = IDI_HELLO;

?

???????? // The large icon for this application. Do not free this

???????? // HICON; it is freed by the Control Panel infrastructure.

???????? lpNewCplInfo->hIcon = LoadIcon(g_hModule,

????????????????????????????????? MAKEINTRESOURCE(IDI_HELLO));

?

????????? LoadString(g_hModule, IDS_APP_TITLE, lpNewCplInfo->szName,

???????????????????? lengthof(lpNewCplInfo->szName));

????????? LoadString(g_hModule, IDC_Hello, lpNewCplInfo->szInfo,

???????????????????? lengthof(lpNewCplInfo->szInfo));

????????? _tcscpy(lpNewCplInfo->szHelpFile, _T(""));

????????? return 0;

????? }

????? 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).

????? PROCESS_INFORMATION pi = {0};

????? if (CreateProcess(_T("\\Windows\\Hello.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi))

????? {

??????? CloseHandle(pi.hThread);

??????? CloseHandle(pi.hProcess);

??????? return 0;

????? }

????? 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_NEWINQUIRE的時候,加載了IDI_HELLO,IDS_APP_TITLE和IDC_Hello三個資源,分別是一個圖標和兩個字符串。為工程添加rc資源文件和resource.h頭文件,導入圖標資源和字符串資源。資源的導入和定義比較簡單,所以不介紹具體步驟了。

?

4. 修改HelloCPL工程配置:

打開HelloCPL.bib文件,添加如下內容:

MODULES

HelloCPL.cpl? $(_FLATRELEASEDIR)\HelloCPL.cpl?????????????? NK

?

右擊HelloCPL工程,選擇Properities,選擇General頁面,在Custom Variables項中添加變量,變量名字為CPL,值為1。

?

再次右擊HelloCPL工程,選擇Properities,選擇C/C++頁面,確認Additional Macro Definitions的值為$(CDEFINES) -DHelloCPL_EXPORTS。設置DLL Entry Point項為DllMain。在Include Directories項中添加路徑$(_PROJECTROOT)\cesysgen\oak\inc。

?

5. 編譯Hello應用程序和HelloCPL工程:

編譯開始創建的Hello應用程序和HelloCPL工程,在WinCE6.0中,編譯完成后會自動Makeimg操作。

?

?

通過上面的步驟,可以把應用程序添加到WinCE系統的控制面板中,最后編譯成功以后,就可以下載運行了,在此我添加了一個Hello的應用程序,名字叫Hello application,運行結果如圖:

?

總結

以上是生活随笔為你收集整理的WinCE控制面板添加应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。