WINCE 界面设置

首先感谢帖子的原作者。转自http://www.ustcers.com/blogs/devzhao/pages/13027.aspx
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.。。。。待续

posted @ 2008-06-28 11:40 Wang Wei 阅读(28) | 评论 (0)编辑
  挺有用的帖子,对原作者表示感谢。
http://blog.csdn.net/norains/archive/2006/04/25/677244.aspx

新一篇: WINCE实现直接写屏(一)

//=====================================================================================================
//AUTHOR:
//  norains
//DATE:
//  Tuesday  25-April -2006
//=====================================================================================================

1.让桌面不显示"我的电脑","回收站"
  删除以下键值:
  [HKEY_LOCAL_MACHINE\Explorer\Desktop]
  {000214A0-0000-0000-C000-000000000046}  ;"My Computer"
  {000214A1-0000-0000-C000-000000000046}  ;Recycle Bin"

  存在这两个键值的文件有:
  $(_WINCEROOT)\PUBLIC\SHELL\OAK\FILES\shell.reg
  $(_WINCEROOT)\PUBLIC\WCESHELLFE\OAK\FILES\wceshellfe.reg
  $(_WINCEROOT)\PUBLIC\WCESHELLFE\OAK\FILES\wceshellfe88.reg


2.直接删除文件,不放回回收站
  [HKEY_LOCAL_MACHINE\Explorer]
  "UseRecycleBin"=dword:0 ;设置0为直接删除;设置1为放入回收站


3.修改XP皮肤的系统界面颜色
  如果选择了XP SKIN,则在控制面板的"显示"选项中是无法更改一些窗口的颜色的.不过,我们倒是可以通过更改$(_WINCEROOT)\PUBLIC\COMMON\OAK\FILES\common.reg文件中的XP颜色参数来达到更改窗口颜色的目的.
原XP样式的颜色参数如下:
[HKEY_LOCAL_MACHINE\SYSTEM\GWE]
  "SysColor"=hex:\
   00,00,00,00,\
   3A,6E,A5,00,\
   00,00,00,00,\
   00,00,00,00,\
   EF,EB,DE,00,\
   FF,FF,FF,00,\
   00,00,00,00,\
   00,00,00,00,\
   00,00,00,00,\
   FF,FF,FF,00,\
   C0,C0,C0,00,\
   C0,C0,C0,00,\
   80,80,80,00,\
   31,69,C6,00,\
   FF,FF,FF,00,\
   EF,EB,DE,00,\
   AD,AA,9C,00,\
   80,80,80,00,\
   00,00,00,00,\
   00,00,00,00,\
   FF,FF,FF,00,\
   73,6D,63,00,\
   FF,FF,FF,00,\
   00,00,00,00,\
   FF,FF,E1,00,\
   EF,EB,DE,00,\
   00,00,00,00  
  
  代表的意思是:
0  COLOR_SCROLLBAR        Color of the gray area of a scroll bar.
1  COLOR_BACKGROUND       Background color of the desktop window.
2  COLOR_ACTIVECAPTION      Color of the title bar of an active window.
3  COLOR_INACTIVECAPTION     Color of the title bar of an inactive window.
4  COLOR_MENU          Background color of a menu.
5  COLOR_WINDOW         Background color of a window.
6  COLOR_WINDOWFRAME       Color of a window frame.
7  COLOR_MENUTEXT        Color of the text in a menu.
8  COLOR_WINDOWTEXT       Color of the text in a window.
9  COLOR_CAPTIONTEXT       Color of the text in a title bar and of the size box and scroll bar arrow box.
10 COLOR_ACTIVEBORDER      Color of the border of an active window.
11 COLOR_INACTIVEBORDER     Color of the border of an inactive window.
12 COLOR_APPWORKSPACE      Background color of multiple document interface (MDI) applications.
13 COLOR_HIGHLIGHT        Color of an item selected in a control.
14 COLOR_HIGHLIGHTTEXT      Color of the text of an item selected in a control.
15 COLOR_BTNFACE         Color of the face of a button.
16 COLOR_BTNSHADOW        Shadow color of buttons for edges that face away from the light source.
17 COLOR_GRAYTEXT        Color of shaded text. This color is set to 0 if the current display driver does not support a solid gray color.
18 COLOR_BTNTEXT         Color of the text for push buttons.
19 COLOR_INACTIVECAPTIONTEXT   Color of the text in the title bar of an inactive window.
20 COLOR_BTNHIGHLIGHT      Highlight color of buttons for edges that face the light source.
21 COLOR_3DDKSHADOW       Color of the dark shadow for three-dimensional display elements.
22 COLOR_3DLIGHT         Highlight color of three-dimensional display elements for edges that face the light source.
23 COLOR_INFOTEXT        Color of the text for ToolTip controls.
24 COLOR_INFOBK         Background color for ToolTip controls.
25 COLOR_STATIC         Background color for static controls and dialog boxes. Supported in Windows CE 2.0 and later.
26 COLOR_STATICTEXT       Color of the text for static controls. Supported in Windows CE 2.0 and later.
27 COLOR_GRADIENTACTIVECAPTION  Color of the title bar of an active window that is filled with a color gradient.
28 COLOR_GRADIENTINACTIVECAPTION
 


4.文件夹映射更改
  假设我们要将"桌面"文件夹从根目录(在这里指的是RAM空间)移动到某个外部储存器"HardDisk"中,可以按如下步骤:
  1.将$(_WINCEROOT)\PUBLIC\COMMON\OAK\FILES\INTLTRNS\0804\common.str文件中的LOC_PATH_DESKTOP宏定义改为"file://harddisk//Windows//桌面"
  2.然后将所有.dat文件中关于LOC_DESKTOP_DIR的选项,全部在windows前添加"\HardDisk",
   如:Directory("\Windows\LOC_DESKTOP_DIR"):-File("LOC_INTERNETEXPLORER_LNK", "\Windows\iesample.lnk")
   改为:Directory("\HardDisk\Windows\LOC_DESKTOP_DIR"):-File("LOC_INTERNETEXPLORER_LNK", "\Windows\iesample.lnk")即可.
   
   如果有创建文件夹的话,也要改:
   如:root:-Directory("\LOC_PROGRAMFILES_DIR")
   改为:root:-Directory("HardDisk\LOC_PROGRAMFILES_DIR")

posted @ 2008-06-28 11:37 Wang Wei 阅读(28) | 评论 (0)编辑
环境:
Wince5.0+ARM926
目的:
按照自己的风格建立Shell
背景:
考虑到产品外观及风格的一致性,无法直接把Explorer作为Shell,而且,又无简单的把Explorer直接放到后台(会出现一些问题,譬如启动的瞬间,Explorer会显示一下)
方法:
1. 直接修改Explorer,改为自己的风格。个人认为这是最根本最有效的方法,但是工作量比较大,考虑到时间只能放弃。
2. 直接用自己的Shell替代Explorer。在Shell.reg中有一句
[HKEY_LOCAL_MACHINE\init]
"Launch50"="explorer.exe"
"Depend50"=hex:14,00, 1e,00
就是这一句在启动的最后把Explorer启动起来。(Launchxx的含义及用法在PB的帮助里面有解释)。
把explorer.exe替换自己的shell即可(譬如MyShell.exe),以前一直使用这种方法。
但这种方法有缺陷:wince的Common Dialog是依赖于Explorer的,这就导致很多Wince自带的程序执行时有问题,譬如WordPad无法打开和保存。。。(如果哪位知道如何在不启动Explorer的情况下使用Common Dialog的话,还烦请告诉小弟)
3. 现在是对Explorer稍作修改确保显示没有问题,然后放在后台,步骤如下:
3.1. 按照PB Help的提示修改Explorer(如果通过修改注册表实现,则尽量不修改Explorer代码)
a. 复制WINCE500\PUBLIC\SHELL\OAK\HPC,到WINCE500\PUBLIC\SHELL\OAK目录下,并重命名为MyShell
b. 修改dir文件
c. 去掉桌面上显示的"Microsoft Windows CE...........":
直接把desktopview.cpp中#ifndef SHIP_BUILD改为#if 0即可。
(理论上在Platform Setting里面可以设置此段文字不显示的,但是不知为何不起作用)
d. 修改Taskbar自动隐藏时的高度:
taskbar.hxx中,把TASKBAR_HEIGHT_AUTOHIDE改为0
e. 去掉Explorer启动时的音乐:
把WinMain中的sndPlaySound(c_szSystemStart, SND_ALIAS|SND_ASYNC|SND_NODEFAULT);注释掉。
(注册表中,没有找到开机音乐的键值。如果哪位知道,请不吝赐教)
3.2. 修改注册表
a. Shell.reg: 桌面上去掉"My Device"和"Recycle Bin"两个图标
找到
[HKEY_LOCAL_MACHINE\Explorer\Desktop]
"{000214A0-0000-0000-C000-000000000046}"="My Device"
"{000214A1-0000-0000-C000-000000000046}"="Recycle Bin"
改为
[HKEY_LOCAL_MACHINE\Explorer\Desktop]
;"{000214A0-0000-0000-C000-000000000046}"="My Device"
;"{000214A1-0000-0000-C000-000000000046}"="Recycle Bin"
b. 去掉桌面上的其它快捷方式
wince用Directory("\Windows\LOC_DESKTOP_DIR"):-File("LOC_MSPWORD_LNK","\Windows\wordpad.lnk")的方式在桌面上建立快捷方式
把WINCE500\PUBLIC\WCEAPPSFE\OAK\FILES\wceappsfe.dat中的所有Directory("\Windows\LOC_DESKTOP_DIR"):-File(...)全部注释掉。
把WINCE500\PUBLIC\WCESHELLFE\OAK\FILES\wceshellfe.dat中的所有Directory("\Windows\LOC_DESKTOP_DIR"):-File(...)全部注释掉。
c. 设置Taskbar为自动隐藏
在注册表中添加
; -- 使任务栏缺省自动隐藏
[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\AutoHide]
@="1"

; -- 使任务栏缺省不总在最前
[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\OnTop]
""=dword:0
d. 修改桌面背景颜色
[HKEY_LOCAL_MACHINE\SYSTEM\GWE]
"SysColor"=hex:\
00,00,00,00,\
00,00,00,00,\ //Desktop窗口背景颜色,现在设置为黑色
00,00,00,00,\
00,00,00,00,\
EF,EB,DE,00,\
FF,FF,FF,00,\
00,00,00,00,\
00,00,00,00,\
00,00,00,00,\
FF,FF,FF,00,\
C0,C0,C0,00,\
C0,C0,C0,00,\
80,80,80,00,\
31,69,C6,00,\
FF,FF,FF,00,\
EF,EB,DE,00,\
AD,AA,9C,00,\
80,80,80,00,\
00,00,00,00,\
00,00,00,00,\
FF,FF,FF,00,\
73,6D,63,00,\
FF,FF,FF,00,\
00,00,00,00,\
FF,FF,E1,00,\
EF,EB,DE,00,\
00,00,00,00
e. 背景图片
[HKEY_CURRENT_USER\ControlPanel\Desktop]
"wallpaper"="\\NandDisk\\Startup\\wallpaper.bmp"
f. 启动自己的Shell
[HKEY_LOCAL_MACHINE\init]
"Launch70"="\\Windows\\ShellLoader.exe"
"Depend70"=hex:14,00, 1e,00

效果:系统启动后,先启动explorer显示wallpaper.bmp,然后启动ShellLoader.exe
posted @ 2009-03-12 19:58  gmh  阅读(3115)  评论(0编辑  收藏  举报