Windows CE 桌面UI修改

桌面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
      } 
     
      
   }

  1. 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::PaintBackground中修改。

修改背景颜色:

// --- 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__));

5.。。。。待续

CDesktopView类相关推荐

  1. Windows CE 桌面UI修改

    Windows CE 桌面UI修改 桌面UI主要涉及到CDesktopView类 ,CDesktopView类继承于CDefShellView类;如果要更改桌面的UI表现形式,只要从这个类入手即可.C ...

  2. 自己搜集编写的Delphi 通用函数

    { ********************************************************************** } { Currency Common Functio ...

  3. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题

    继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...

  4. MybatisPlus忽略实体类中的非数据库字段、JPA忽略实体类中的非数据库字段、HeHibernate忽略实体类中的非数据库字段

    mybatis plus忽略映射字段时可以在实体类属性上使用以下注解: @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的. @TableField(e ...

  5. IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...

    使用IDEA项目添加Hibernate扩展,生成实体类并配置实体类中的注解 一.使用Hibernate自动生成实体类 1.在项目上右键,选择Add Framework Support找到 Hibern ...

  6. IDEA自动生成类注解,IDEA作者信息自动生成,IDEA类信息自动生成

    在新建类文件的时候自动生成注解,诸如我们常见的那些 作者,创建时间,TODO 等等 将以下格式的代码放在Settings -> File and Code Templates -> Inc ...

  7. javabean实体类与实体类之间的快速转换

    一.Dozer是什么? dozer是一个能把实体和实体之间进行转换的工具.只要建立好映射关系.就像是ORM的数据库和实体映射一样. 使用方法示例如下: // article(PO) -> art ...

  8. 利用dom4j将实体类转换为对应的xml报文

    利用dom4j生成xml报文 目标格式: <?xml version="1.0" encoding="GBK"?><Packet type=& ...

  9. Idea groovy表生成实体类带注释

    Idea groovy表生成实体类带注释 1.点开datasourse,打开idea带的数据库工具,具体添加数据库连接,这里不描述. 这时点击会生成一个poji 这时生成的pojo中是不带中文注释的, ...

最新文章

  1. java逻辑第九章_深入理解jvm-(第九章)类加载及执行子系统的案例与实战
  2. 数据结构(四)之单链表查找中间结点
  3. 毕业生当头一棒?忆本科四年,高校毕业生与就业单位基本要求差多少?工作还是考研?
  4. 打破双亲委派机制有什么用_被打破的双亲委托机制
  5. 《JavaScript Dom编程艺术》读书笔记(五)
  6. 第0章 前言(续1)
  7. 2019年5G阵营 iPhone可能掉队了!
  8. android 桥梁模式,【设计模式】桥接模式
  9. MVC+WebApi+Restful
  10. 基于RV1126平台imx291分析 --- rkcif_mipi注册
  11. HTML+CSS实现小米官网首页
  12. Golang环境及revel框架在Linux下的安装
  13. 阿里巴巴Mysql规范
  14. 深入理解C#面向对象之继承
  15. 计算与推断思维 七、函数和表格
  16. 明明努力了却学不好Java_为什么我这么努力,还是得不到自己想要的结果???...
  17. ~ 如何用C++自制一个日麻游戏 ~(一)大体框架构建 § 2 数据结构
  18. Nginx 记录请求 Body
  19. Android Received status code 502 from server: Bad Gateway
  20. 【转】山地车知识:什么是XC,什么又是Freeride

热门文章

  1. python画三维立体图-Python+matplotlib绘制三维图形5个精选案例
  2. python运行速度和电脑配置有关系吗-学python最电脑配置有要求么
  3. python 科学计算基础教程电子版-Python 科学计算基础 (整理)
  4. python简单代码input-python简单基础代码
  5. python是不是特别垃圾-Python 这语言真是混乱和原始
  6. python编程爱心-python画一个玫瑰和一个爱心
  7. python小学生教材-python纳入小学生教材,以后该如何辅导娃的作业?
  8. dup and dup2的剖析
  9. 题目1252:回文子串
  10. CheckBox的使用(四):ListView中的项设置为可以多选