norains的专栏

只专注于WINCE开发

用户操作
[即时聊天] [发私信] [加为好友]
雨仔ID:norains
130382次访问,排名643好友0人,关注者23
代码其实是一种乐趣
norains的文章
原创 186 篇
翻译 0 篇
转载 10 篇
评论 256 篇
norains的公告
联系方式请看置顶文章
最近评论
hustpanda:电子书看不了呢?
bobo:“耍大牌”...... 你就该直接拉黑
bulrush:你好,首先先感谢一下。我看了你的音量控制,自己也去实现了一下,但是我个人感觉“AudioUpdateFromRegistry”没有依据注册表的设置来更新控制面板的音量。没有马上更新,我重启系统后才看到更新的结果。也就是说这种方法是可行,但是必须要重启,显然这不合理。上面的兄弟说:引用了这两个类后不起作用
如:
void CSoundDlg::OnSoft()
……
manyanxinlv:尽管我还小 但是 我还是看看
xumercury:= =|||||我汗。。。ps看的很囧。。
文章分类
收藏
    相册
    动漫
    文章图片
    程序交流
    xumercury的BLOG
    狗友们的博客
    清蒸石斑鱼
    美女如刀锋
    茁茁的BLOG
    魅力老姐的窝
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 WinCE 控制面板的创建收藏

    新一篇: WinCE 控制面板和驱动通信 | 旧一篇: WinCE 系统界面修改偏方(一)

    //=====================================================================================================
    //AUTHOR:
    //  norains
    //DATE:
    //  Saturday 25-Feb-2006
    //=====================================================================================================
    控制面板的组件,其实就是一个地地道道的DLL文件,所不同的是其后缀名为.CPL而已.控制面板组件对外必须要实现一个CPlApplet接口,其原型为:LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2).而在此函数之中,为了使组件正常运作,我们必须要处理如下消息:CPL_INIT(初始化,可以在这分配内存等等),CPL_GETCOUNT(显示的组件数目),CPL_NEWINQUIRE(获取组件的信息,才能正常显示),CPL_DBLCLK(双击图标时执行).
    为方便观看,将此函数体列出:

    // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    // 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文件内部进行操作;但我们完全可以把.CPL文件当成一个外壳,其作用只是在"控制面板"中显示一个图标,真正的处理是调用另外一个EXE文件.这样的好处是,此.CPL代码通用性强,如果想再添加别的组件,只要更改.CPL少量代码;并且,功能模块的分离,使得我们如果要更改相关功能,也只要修改相应的EXE文件,调试也更加方便.

    现在就让我们看一下如何在控制面板中调用EXE文件.
    我们需要的是,在控制面板中双击我们显示的图标就调用我们相应的EXE程序;很显然,我们只需要在CPL_DBLCLK消息中添加调用代码即可.
    extern "C"  LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
    {
      switch (message)
       
       ....
       
        case CPL_DBLCLK:
      {
       //-----------------------------------------------------------------
       //关于FindWindow函数的说明:
       //原型:HWND FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName);
       //lpClassName:要赋的值是类的字符串名称,在ce下可以运行Remote Spy++进行查看;在本例子中采用此工具看到的是"Dialog".
       //此参数也可以为NULL,前提是所有在运行的窗口标题不同
       //lpWindowName:窗口的标题字符串名称,也即是我们可以看到的窗口标题   
       //------------------------------------------------------------------
       //由于我们的这个exe文件只有一个窗口,下面这个函数也可以这样写FindWindow (NULL,TEXT("背光调节"))
       HWND hWnd = FindWindow (L"Dialog",TEXT("背光调节"));
       if (hWnd)
       {      
        //如果已经运行过一个实例,则把它提到窗口前
        SetForegroundWindow (hWnd);
        CloseHandle(hWnd);
        return 0;  
       }
       else
       {
        //调用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.
      }
      
      ....
      
    }

    发表于 @ 2006年02月25日 12:46:00|评论(loading...)|编辑

    新一篇: WinCE 控制面板和驱动通信 | 旧一篇: WinCE 系统界面修改偏方(一)

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © norains