如何修改wince下的UI(...菜单等

来源:互联网 发布:和兴商厦b座 淘宝 编辑:程序博客网 时间:2024/05/16 06:37
桌面UI主要涉及到CDesktopView类 ,CDesktopView类继承于CDefShellView类;如果要更改桌面的UI表现形式,只要从这个类入手即可.CDesktopView类位于
    $(_WINCEROOT)/PUBLIC/SHELL/OAK/HPC/CESHELL文件夹中.
   
   
    1.更改右键弹出菜单选项
    桌面的弹出菜单有两种:一种是在桌面按右键弹出的FOLDER_VIEW_MENU_OFFSET;另一种是在图标上点右键弹出的ITEM_MENU_OFFSET.两种菜单的完整表现如下:
   
        /******************************************************
        //FOLDER_VIEW_MENU_OFFSET菜单
        查看            (pos:FOLDER_VIEW_MENU_OFFSET)
        --------------
        图标排列方式
        刷新
        --------------
        粘贴
        粘贴快捷方式
        --------------
        新建文件夹
        --------------
        属性
        *******************************************************/
       
       
        /******************************************************
        //ITEM_MENU_OFFSET菜单
        打开          (pos:ITEM_MENU_OFFSET)
        ----------
        剪切
        复制
        ----------
        删除
        重命名
        ----------
        属性
        *******************************************************/
       
    在弹出菜单之前,都需要调用CDesktopView::HandleInitMenuPopup()函数对菜单进行构建;所以,要更改菜单的选项,也是在此函数中进行.
    删除菜单子项可以通过::RemoveMenu()函数进行删除,有以位置(MF_BYPOSITION)或命令方式(MF_BYCOMMAND).
    例如:
    1.删除"复制"子菜单:
      ::RemoveMenu(hmenu, IDC_EDIT_COPY, MF_BYCOMMAND);
    2.删除ITEM_MENU_OFFSET菜单的第二个子菜单:
        ::RemoveMenu(hmenu, ITEM_MENU_OFFSET+1, MF_BYPOSITION); //其后的菜单子项位置会上移
       
    以下这段代码FOLDER_VIEW_MENU_OFFSET只保留了"刷新","属性";ITEM_MENU_OFFSET只保留了"打开","属性"(夹杂在begin和end间是笔者加的代码)
   
LRESULT CDesktopView::HandleInitMenuPopup(HMENU hmenu, PopupMenuInfo * pPopupMenuInfo)
{
 
    LRESULT result = CDefShellView::HandleInitMenuPopup(hmenu, pPopupMenuInfo);

  if ((0 == result) && (FWF_DESKTOP & m_fFlags))
  {
      if (pPopupMenuInfo && (FOLDER_MENU_OFFSET == pPopupMenuInfo->offset))
      {   
           
               
        ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET, MF_BYPOSITION); // "View" sub-menu
        ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET, MF_BYPOSITION); // "View" separator
         
        ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET, MF_BYPOSITION); //"图标排列方式"
        ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET+1, MF_BYPOSITION); //separator
        ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET+1, MF_BYPOSITION); //"粘贴"
        ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET+1, MF_BYPOSITION); //"粘贴快捷方式"
        ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET+1, MF_BYPOSITION); //separator
        ::RemoveMenu(hmenu, FOLDER_VIEW_MENU_OFFSET+1, MF_BYPOSITION); //"新建文件夹"
      }       
     
     
      else if (pPopupMenuInfo && (ITEM_MENU_OFFSET == pPopupMenuInfo->offset))
      {
               
     
        ::RemoveMenu(hmenu, IDC_EDIT_CUT, MF_BYCOMMAND);
        ::RemoveMenu(hmenu, IDC_EDIT_COPY, MF_BYCOMMAND);
        ::RemoveMenu(hmenu, IDC_FILE_DELETE, MF_BYCOMMAND);
        ::RemoveMenu(hmenu, IDC_FILE_RENAME, MF_BYCOMMAND);
        ::RemoveMenu(hmenu, ITEM_MENU_OFFSET+1, MF_BYPOSITION); //  separator
        ::RemoveMenu(hmenu, ITEM_MENU_OFFSET+1, MF_BYPOSITION); //  separator
      }
   
     
  }

  return result;
 
}
    那么增加菜单项如何实现呢,呵呵。。。^_^
   
2.禁止拖拽桌面图标
      CDesktopView的拖拽处理是直接采用基类CDefShellView的DoDragDrop()函数.如果要禁止桌面图标拖拽,只要重载DoDragDrop()函数为空即可.
      在desktopview.h重载,代码如下:
      protect:
      virtual void DoDragDrop(NMLISTVIEW * pnmListView){};
         
3.桌面图标排列顺序
    桌面图标排列顺序有按名称,类型,日期,大小以及还有一个自动排列;默认的是按名称排列.
    在CDesktopView中处理命令的是HandleCommand()函数,其实际是调用CDefShellView的HandleCommand ()函数.为方便使用,我们可以以此方式调用:CDefShellView::HandleCommand(dwCmd);
    其中,dwCmd是命令类型,有如下宏定义命令:
    IDC_EDIT_COPY        :复制
    IDC_EDIT_CUT          :剪切
    IDC_EDIT_PASTE        :粘贴
    IDC_EDIT_PASTESHORTCUT    :粘贴快捷方式
    IDC_EDIT_SELECTALL      :全选
    IDC_EDIT_UNDO        :撤销
    IDC_FILE_DELETE        :删除
    IDC_FILE_NEWFOLDER      :新建文件夹
    IDC_FILE_OPEN        :打开
    IDC_FILE_PROPERTIES      :属性
    IDC_FILE_RENAME        :重命名
    IDC_FILE_SENDTO_DESKTOP    :发送到桌面
    IDC_FILE_SENDTO_MYDOCUMENTS  :发送到我的文档
    IDC_HELP_TOPICS         无作用)
    IDC_REFRESH          :刷新
    IDC_ARRANGE_AUTO        :自动排列
    IDC_ARRANGE_BYDATE      :按日期排列
    IDC_ARRANGE_BYNAME      :按名称排列
    IDC_ARRANGE_BYSIZE      :按大小排列
    IDC_ARRANGE_BYTYPE      :按类型排列
    IDC_VIEW_DETAILS        :详细信息查看
    IDC_VIEW_LIST        :列表方式查看
    IDC_VIEW_ICONS        :图标方式查看
    IDC_VIEW_OPTIONS        :查看选项(?)
    IDC_VIEW_TYPE        :查看类型(?)
    IDC_GO_MYDOCUMENTS      :转到到我的文档
    IDC_GO_FOLDERUP        :转到上级文件夹
    ID_ESCAPE          :ESC
    ID_CONTEXTMENU        :内容菜单(?)
   
    如果需要图标以日期方式初始化排列,只要在CDesktopView::CreateViewWindow()函数最后添加此语句即可:
    CDefShellView::HandleCommand(IDC_ARRANGE_BYDATE);
   
4.更改桌面背景
在CDesktopView:  aintBackground中修改。
修改背景颜色:

// --- Original code commented out ---
// ::FillRect(hdc, &rc, ::GetSysColorBrush(COLOR_BACKGROUND));
// Explicitly set the background color.
::FillRect(hdc, &rc, ::GetSysColorBrush(RGB(230, 150, 230)));修改显示的os版本信息(类似“windows ce.net 4.2")  /* -- Original code commented out --
::wsprintf(wszVersion, L"Microsoft Windows /
CE v%d.%02d (Build %d on %s) ", VerInfo.dwMajorVersion,
            VerInfo.dwMinorVersion, VerInfo.dwBuildNumber,
            TEXT(__DATE__));
*/
// Display shell name along with Windows CE version information.
::wsprintf(wszVersion, L"<Shell Name> for Microsoft Windows /
          CE v%d.%02d (Build %d on %s) ",
          VerInfo.dwMajorVersion, VerInfo.dwMinorVersion,
          VerInfo.dwBuildNumber, TEXT(__DATE__));本文出自 51CTO.COM技术博客
原创粉丝点击