norains的专栏

只专注于WINCE开发

用户操作
[即时聊天] [发私信] [加为好友]
norainsID:norains
142871次访问,排名598,好友0人,关注者53人。
代码其实是一种乐趣
norains的文章
原创 189 篇
翻译 0 篇
转载 10 篇
评论 274 篇
norains的公告
联系方式请看置顶文章
最近评论
dfdf:讨厌MFC!我觉得MFC就是太乱了!看似无用的代码不要不行,MD微软啥都给我们做完了,原理性的东西我们却永远没法搞懂了!
ironox:有个地方 我觉得很别扭,不知道怎么办好

比如说 CReg reg(HKEY_CURRENT_USER,TEXT("ControlPanel\Volume"));
ControlPanel\Volume 有可能不存在呀,这个该怎么处理哦?对象虽然创建了,出错了也没提示
szterry:呵呵,果然工作狂技术狂,同感,一样的感觉……不过我才刚毕业一年……搞IT就是玩……
jinlking:这个botton的实现只是在主窗口画了一块区域,对于事件的处理还要放在主窗口的窗口处理函数之中,在对应的消息处理上调用CheckTap来判断是否是此“按钮”,问一下,这种方法与把按钮封装在子窗口中有什么区别,二者使用那个更好?
KUODY:博主真是好人
文章分类
收藏
    相册
    动漫
    文章图片
    程序交流
    xumercury的BLOG
    狗友们的博客
    清蒸石斑鱼
    美女如刀锋
    茁茁的BLOG
    魅力老姐的窝
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 WinCE 开始菜单StartMenu_Create()函数代码分析收藏

    新一篇: EVC无法调试远程设备应用程序的解决方案 | 旧一篇: WinCE 下播放MP3代码

    //=====================================================================================================
    //AUTHOR:
    //  norains
    //DATE:
    //  Saturday 4-Mar-2006
    //=====================================================================================================
    windows ce 的开始菜单的子项可以通过更改注册表来更改,但只能对有限的子项进行更改.如果想要对开始菜单进行更为详尽的设置,必须要对代码下手.开始菜单位于"$(_WINCEROOT)\PUBLIC\SHELL\OAK\HPC\EXPLORER\TASKBAR\stmenu.cpp.由于代码众多,再此只对菜单的创建函数StartMenu_Create()做一个注释.下面这个例子的菜单只有"设置"和"程序"两个子项
    HMENU StartMenu_Create(VOID)
    /*---------------------------------------------------------------------------*\
     *
    \*---------------------------------------------------------------------------*/
    {
     BOOL fOK= FALSE;
     HMENU hmenu;
     BITMAP bm;
     HDC hdc;
     int i;
     
     //创建"设置"菜单
     HMENU hmenuSettings = StartMenu_CreateSettingsMenu();
     if (!hmenuSettings) {
      return NULL;
     }

     //如果无法创建下级弹出菜单,则跳出此函数
        hmenu = CreatePopupMenu();
     if (!hmenu) {
      FileMenu_Destroy(hmenuSettings);
      return 0;
     }
      

     // 开始菜单
     for (i=0; i<START_NUM_STATIC_ITEMS; i++) {

      //如果不存在peghelp.exe文件,将去掉"Help"子项
      if((IDM_START_HELP == stmenuData[i].idMenuCmd) && (GetFileAttributes(L"\\Windows\\peghelp.exe") == -1))
       continue;
     
      //如果注册表设置不采用挂起,则将"挂起"子项去掉(是否采用分隔符也可以在注册表设定)
      if ((IDM_START_SUSPEND == stmenuData[i].idMenuCmd) || (0 == stmenuData[i].idMenuCmd))
            {
                DWORD dwLen;
                DWORD dwValue;
                HKEY  hkey;
               
                dwValue = TRUE; // 设置默认值
                dwLen = sizeof(dwValue);
                if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, L"Explorer", 0, KEY_READ, &hkey ) == ERROR_SUCCESS )
                {
                    RegQueryValueEx(hkey, L"Suspend", NULL, NULL, (LPBYTE)&dwValue, &dwLen );
                    RegCloseKey( hkey );
                }
                if (FALSE == dwValue) {
                    continue;
                }
      }

      if (0 == idFirstMenu) {
       idFirstMenu = stmenuData[i].idMenuCmd;
      }
      idLastMenu = stmenuData[i].idMenuCmd;
     
      if (stmenuData[i].idMenuIcon) {
       if (stmenuData[i].idMenuCmd == IDM_START_SETTINGS){
        // 插入"设置"菜单
        fOK = AppendMenu(hmenu,  MF_OWNERDRAW | MF_POPUP,
             (UINT)hmenuSettings, (LPCTSTR)&stmenuData[i]);
       }
       
       //*--------------------------------------------------------------------------------------------------------------
       //此段代码管理"运行","挂起"   
       else if (!stmenuData[i].nSpecialFolder ||
            (stmenuData[i].nSpecialFolder == STATIC_ITEM)) {
        // insert standard menu item
        //if(stmenuData[i].idMenuCmd!=IDM_START_RUN ||stmenuData[i].idMenuCmd!=IDM_START_SUSPEND )  //my adding:不添加"运行","挂起"选项
        //ori: {fOK = AppendMenu(hmenu, MF_OWNERDRAW, stmenuData[i].idMenuCmd,(LPCTSTR) &stmenuData[i]);}
       }
       //--------------------------------------------------------------------------------------------------------------*/
       
       
       //*----------------------------------------------------------------------------------------------------- 
       //此段代码管理:"程序","收藏","文档";
       
       //++++++++++++++++++++++++++
       //:my adding
       //不添加"收藏","文档"选项
       else if(stmenuData[i].idMenuCmd == IDM_START_FAVORITES ||stmenuData[i].idMenuCmd == IDM_START_DOCUMENTS)
        {;}
       //++++++++++++++++++++++++++
       
       else{
        // insert cascade item
        // my explanation:cascade menu指的是带有下级弹出菜单的,standard menu是单独的,没有下级弹出菜单的    
        HMENU hmenuSubMenu;
        LPITEMIDLIST pidl;

        if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, stmenuData[i].nSpecialFolder, &pidl))) {
            hmenuSubMenu = FileMenu_CreatePopupWithPIDL(pidl);//创建弹出的下级菜单
            fOK = AppendMenu(hmenu,  MF_OWNERDRAW | MF_POPUP,
                 (UINT)hmenuSubMenu,
                 (LPCTSTR)&stmenuData[i]);
                    }            
       }
       //-------------------------------------------------------------------------------------------------------*/
       
      }else{
        //fOK = AppendMenu(hmenu,MF_SEPARATOR, 0,0); //创建一个菜单分割符
      }
      ASSERT(fOK);

     }

     if (g_fUseSTBitmap)
     {
      hdc = GetDC(NULL);
      if (GetDeviceCaps(hdc, BITSPIXEL) == 2) {
       hbmSTPegasus = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_STPEGASUSG));
      }else{
       hbmSTPegasus = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_STPEGASUS));
      }
      ReleaseDC(NULL, hdc);

      GetObject(hbmSTPegasus, sizeof(BITMAP), &bm);

      sizeSTPegasus.cx = bm.bmWidth;
      sizeSTPegasus.cy = bm.bmHeight;
     }
     else
     {
      hbmSTPegasus = NULL;
      sizeSTPegasus.cx = 0;
      sizeSTPegasus.cy = 0;
     }

     return hmenu;
     
    } /* StartMenu_Create() */

    发表于 @ 2006年03月04日 10:14:00|评论(loading...)|编辑

    新一篇: EVC无法调试远程设备应用程序的解决方案 | 旧一篇: WinCE 下播放MP3代码

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © norains