WinCE 开始菜单StartMenu_Create()函数代码分析

//=====================================================================================================
//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() */

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: wince mcgstpc_net35_setup 是一个 Windows CE 平台上的安装程序,用于安装 Microsoft .NET Compact Framework 3.5 (NETCF 3.5) 运行时环境。 Windows CE 是微软为嵌入式系统开发的一种操作系统,它主要用于一些资源有限的设备,如手持设备、嵌入式设备等。而 .NET Compact Framework(简称。NET CF)则是微软为嵌入式系统开发的一套小型的.NET运行时库。 NETCF 3.5 是在之前版本的基础上进行了升级,提供了一些新的功能和改进,使开发人员能够更轻松地创建可在 Windows CE 平台上运行的应用程序。它支持 Windows CE 5.0、6.0 和 7.0 版本,并且兼容性良好。 安装 mcgstpc_net35_setup 的目的是为了在 Windows CE 设备上安装 NETCF 3.5 运行时环境,以便运行基于.NET框架的应用程序。安装程序会将.NETCF 3.5 的核心文件和库文件拷贝到设备中的指定目录,使得设备能够正确解析和执行由.NET CF 编译的应用程序。 安装.NET CF 3.5 不仅可以提供更好的应用程序兼容性,还可以让开发人员能够使用.NET平台上更丰富的功能和特性来开发应用程序。而且.NET CF 还提供了一些用于简化开发的工具和类库,使开发人员能够更快速、高效地开发出质量更高的应用。 总的来说,wince mcgstpc_net35_setup 是一个用于安装 NETCF 3.5 运行时环境的安装程序, 它可以为 Windows CE 设备提供更好的应用程序兼容性和更丰富的开发功能,使得开发人员能够更方便地创建适用于嵌入式系统的.NET应用程序。 ### 回答2: wince mcgstpc_net35_setup 是一个 Windows CE 操作系统上的安装程序。这个安装程序主要是用于安装 MCSTPC 所需的 .NET Compact Framework 3.5 组件。 在 Windows CE 操作系统上,.NET Compact Framework 是用于开发和运行基于.NET技术的应用程序所必需的一个组件。MCSTPC 是一个应用程序,它可能与 .NET Compact Framework 3.5 兼容。 安装过程中,wince mcgstpc_net35_setup 首先会检查系统是否满足安装要求,如系统的硬件配置和操作系统版本等。如果系统符合要求,安装程序会将.NET Compact Framework 3.5 组件提取到合适的目录,并进行必要的注册,以供 MCSTPC 应用程序调用。 通过安装 wince mcgstpc_net35_setup,用户可以确保系统具备运行 MCSTPC 应用程序所需的环境。当用户运行 MCSTPC 时,其所需的 .NET Compact Framework 3.5 组件会被自动加载和使用。 总之,wince mcgstpc_net35_setup 是一个用于安装 .NET Compact Framework 3.5 组件的 Windows CE 安装程序,其目的是为了提供 MCSTPC 应用程序所需的必备环境。 ### 回答3: wince mcgstpc_net35_setup是指Windows CE操作系统中的一个安装模块,用于在设备上安装和配置Microsoft .NET Compact Framework版本3.5。 Microsoft .NET Compact Framework是一种基于.NET技术的轻量级的应用程序开发框架,旨在在嵌入式和移动设备上开发和运行应用程序。它提供了一系列的类库、工具和运行时环境,使开发人员能够在Windows CE设备上构建功能强大的应用程序。 通过安装wince mcgstpc_net35_setup,用户可以将设备升级到支持.NET Compact Framework 3.5的版本。这将使设备能够运行基于.NET技术开发的应用程序,并利用.NET Compact Framework的功能和特性。 安装和配置wince mcgstpc_net35_setup的过程通常较为简单,用户只需执行一个命令或运行一个安装程序,然后跟随提示完成安装过程。安装完成后,设备将具备.NET Compact Framework 3.5的运行环境,并可以运行相应的应用程序。用户还可以根据需要对.NET Compact Framework进行一些配置,例如选择不同的语言支持、调整内存分配等。 总的来说,wince mcgstpc_net35_setup是用于在Windows CE设备上安装和配置.NET Compact Framework 3.5的工具。通过将设备升级到支持.NET Compact Framework 3.5,用户可以运行更多的应用程序,并享受.NET技术带来的便利和功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值