如何在wince控制面板增加一个响应指定程序的图标——转载

来源:互联网 发布:淘宝店铺装修软件大全 编辑:程序博客网 时间:2024/05/21 19:32
如何在wince控制面板增加一个响应指定程序的图标
2008-05-23 19:03

这个比想像中的要麻烦有下面详细的8个步文件
1.首先在驱动文件夹,建立一个:"newcpl" 文件夹

2.建 "sources" 文件,内容如下
TARGETNAME=newcpl
SOURCES= /
connpnl.rc /
connpnl.cpp /
INCLUDES= /
$(_PROJECTROOT)/cesysgen/oak/inc /
CDEFINES=$(CDEFINES) -DBKLPNL_EXPORTS
CPL=1
DLLENTRY=DllEntry
TARGETTYPE=DYNLINK
TARGETLIBS= $(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib /


3.有sources 当然少不了,"makefile",文件 这个参考驱动

4.找一个.ico图标,现在我用"remotenw_new.ico",放在同一目录
5.建一个 "newcpl.def" 文件,内容如下

       LIBRARY         BKLPNL

       EXPORTS
             CPlApplet
6.建一个"resource.h",内容如下
#define IDD_BKL                         101
#define IDC_BKLSLIDE                    1000
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC                     1
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1003
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif
#define IDI_REMOTENW              3000
#define IDS_TITLE                 6000
#define IDS_INFO                  6001
extern "C" BOOL APIENTRY VolumeDlgProc (HWND hDlg, UINT message, UINT wParam, LONG lParam);

7.建一个"connpnl.rc" .内容如下
#define APSTUDIO_READONLY_SYMBOLS
#include "resource.h"
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
#undef APSTUDIO_READONLY_SYMBOLS
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
IDI_REMOTENW            ICON    DISCARDABLE     "remotenw_new.ico"
#ifdef APSTUDIO_INVOKED
1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resrc1.h/0"
END

2 TEXTINCLUDE DISCARDABLE
BEGIN
    "#include ""resource.h""/r/n"
    "#define APSTUDIO_HIDDEN_SYMBOLS/r/n"
    "#include ""windows.h""/r/n"
    "#undef APSTUDIO_HIDDEN_SYMBOLS/r/n"
    "/0"
END

3 TEXTINCLUDE DISCARDABLE
BEGIN
    "/r/n"
    "/0"
END

#endif    // APSTUDIO_INVOKED
IDD_BKL DIALOG DISCARDABLE 0, 0, 187, 98
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "newcpl"//将是在控制面板看到的名字
FONT 10, "System"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,15,77,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,114,77,50,14
    CONTROL         "Slider1",IDC_BKLSLIDE,"msctls_trackbar32",WS_TABSTOP,17,
                    34,152,15
END
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
    IDD_BKL, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 180
        TOPMARGIN, 7
        BOTTOMMARGIN, 91
    END
END
#endif    // APSTUDIO_INVOKED
STRINGTABLE DISCARDABLE
BEGIN
    IDS_TITLE               "newcpl" //名字2.没多大作用
    IDS_INFO                "Connects to other computers, networks, and the Internet"
END

#endif    // Chinese (P.R.C.) resources
#ifndef APSTUDIO_INVOKED
#endif    // not APSTUDIO_INVOKED

8.最后一个文件了"connpnl.cpp"
#include <windows.h>
#include <tchar.h>
#include <cpl.h>
#include "resource.h"
#define lengthof(exp) ((sizeof((exp)))/sizeof((*(exp))))
HMODULE g_hModule = NULL;
extern "C" BOOL WINAPI DllEntry(HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
{
   switch (dwReason)
   {
      case DLL_PROCESS_ATTACH:
      {
        g_hModule = (HMODULE) hinstDLL;
      }
      break;

   }

   return TRUE;
}

extern "C" LONG CALLBACK CPlApplet(HWND hwndCPL, UINT message, LPARAM lParam1, LPARAM lParam2)
{
   switch (message)
   {
      case CPL_INIT:
      {
         return 1;
      }

      case CPL_GETCOUNT:
      {
         return 1; // Just connmc
      }

      case CPL_NEWINQUIRE:
      {
         ASSERT(0 == lParam1);
         ASSERT(lParam2);

         NEWCPLINFO * lpNewCplInfo = (NEWCPLINFO *) lParam2;
         if (lpNewCplInfo)
         {
            lpNewCplInfo->dwSize = sizeof(NEWCPLINFO);
            lpNewCplInfo->dwFlags = 0;
            lpNewCplInfo->dwHelpContext = 0;
            lpNewCplInfo->lData = IDI_REMOTENW;
            lpNewCplInfo->hIcon = LoadIcon(g_hModule, MAKEINTRESOURCE(IDI_REMOTENW));
            LoadString(g_hModule, IDS_TITLE, lpNewCplInfo->szName, lengthof(lpNewCplInfo->szName));
            LoadString(g_hModule, IDS_INFO, lpNewCplInfo->szInfo, lengthof(lpNewCplInfo->szInfo));
            _tcscpy(lpNewCplInfo->szHelpFile, _T(""));
            return 0;
         }
         return 1; // Failure
      }

      case CPL_DBLCLK:
      {
       
         PROCESS_INFORMATION pi = {0};
         if (CreateProcess(_T("//Windows//waveout.exe"), NULL, NULL, //指点执行的文件
                           NULL, FALSE, 0, NULL, NULL, NULL, &pi))
         {
            CloseHandle(pi.hThread);
            CloseHandle(pi.hProcess);
            return 0;
         }
         return 1;
      }

      case CPL_STOP:
      case CPL_EXIT:
      default:
      {
         return 0;
      }
   }

   return 1;
} // CPlApplet

编译后在 platform.bib 加入这个文件"newcpl.cpl"就可以了