5507|17

69

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

Windows CE定制 - 开始菜单 问题 [复制链接]

91program blog 中这样写到


具体的修改,主要是修改WinCE500\PUBLIC\SHELL\OAK\HPC\EXPLORER\TASKBAR\stmenu.cpp文件。
由于是在Windows CE内核源代码的基础之上进行修改的,所以没有将全部代码贴出来。将修改的主要部分内容,进行了说明。其中所需要的部分变量需要自己根据需要自定义。

第一:修改stmenuData数组
例如增加:{IDM_MOBILE, IDS_MOBILE, IDI_MOBILE, STATIC_ITEM, 0, 0, 0},
等,需要多个菜单的,可增加多行的内容

第二:为菜单定义背景图,并加载背景图:hbmStMenuBackGround

第三:在StartMenu_DrawMenuItem()的ODA_SELECT分支中,增加菜单背景绘制过程
if(hbmStMenuBackGround)
{
    HDC hdcmem = CreateCompatibleDC(lpdis->hDC);
    if(hdcmem)
    {
        SelectObject(hdcmem, hbmStMenuBackGround);

        BitBlt(lpdis->hDC, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, hdcmem, rc.left, rc.top, SRCCOPY);
        DeleteDC(hdcmem);
    }
}

第四:在StartMenu_ProcessCommand()函数中,处理菜单响应

    case IDM_MOBILE:
        info.cbSize = sizeof(info);
        info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
        info.lpVerb = NULL;
        info.lpFile = L"\\ResidentFlash\\MyMobileApp.exe";
        info.lpParameters = NULL;
        info.lpDirectory = NULL;
        info.nShow = SW_SHOW;
        info.hInstApp = NULL;
        ShellExecuteEx(&info);
    break;

最后:删除背景图资源
新添加菜单的图标和字符串,在下列两个文件中修改的
WINCE600\PUBLIC\SHELL\OAK\HPC\EXPLORER\MAIN\explorerbase.rc 文件和resource.h文件

按照此方法做了,但是现在的问题是开始菜单的背景没有修改成功,新添加的菜单也没有图标和字符显示

最新回复

支持搂主,收藏  详情 回复 发表于 2008-5-1 18:39
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
LZ是如何编译的?
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
哦,用的build and sysen之后又make Run-Time Image之后图标和字符串添加进去了,
但是背景怎么还是灰色的?

把菜单背景绘制过程添加在分支中:如下
  1. ODA_SELECT

  2.         case ODA_SELECT:               
  3.                                         if(hbmStMenuBackGround)
  4.                                         {
  5.                                                 HDC hdcmem = CreateCompatibleDC(lpdis->hDC);
  6.                                                  if(hdcmem)
  7.                                                  {
  8.                                                      SelectObject(hdcmem, hbmStMenuBackGround);
  9.                                                      BitBlt(lpdis->hDC, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, hdcmem, rc.left, rc.top, SRCCOPY);
  10.                                                      DeleteDC(hdcmem);
  11.                                                  }
  12.                                         }
  13.                                                
  14.            if ((lpdis->itemState & ODS_SELECTED) && lpst->idMenuCmd)
  15.             {
  16.                 HBRUSH hbrush = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT));
  17.                 SetTextColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT));
  18.                 FillRect(lpdis->hDC, &rc, hbrush);
  19.                 DeleteObject((HGDIOBJ)hbrush);
  20.             }
  21.             else
  22.             {
  23.                 HBRUSH hbrush = CreateSolidBrush(GetSysColor(COLOR_MENU));
  24.                 SetTextColor(lpdis->hDC, GetSysColor(COLOR_MENUTEXT));
  25.                 FillRect(lpdis->hDC, &rc, hbrush);
  26.                 DeleteObject((HGDIOBJ)hbrush);
  27.             }

  28.             break;
复制代码

 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
WinCE500\PUBLIC\SHELL\OAK\HPC\EXPLORER\TASKBAR目录,需要从console中单独编译,否则不可能产生正确的东东。

编译完后,将生成的三个文件(好像是)复制到工程的目标文件目录,再make Run-Time Image。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
基本上ok了,只是开始菜单的分阁线有点难看,再研究研究
你啥时候把修改状态栏背景的方法教教,~嘿嘿~~
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
是啊,要首先查看dir看build all是不是编译了,如果没有就单独编译才行。

第三步,有一个像素的内存泄漏,91program太懒了。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

7
 
哦 ,没看出来,怎么讲:有一个像素的内存泄漏?
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

8
 
我也没有看出来内存泄漏啊!
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
我编译用的build and sysen ,就是花费的时间久
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

10
 
如果只修改WinCE500\PUBLIC\SHELL\OAK\HPC\EXPLORER\TASKBAR中的代码,不用build and sysen 。

单独编译这个目录,将生成的文件复制到工程的目标目录,然后make Run-Time Image
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
哦,
91program,说说怎么修把状态栏的背景修改成和桌面一致的吧,找了两天资料了,没能找到
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
状态栏?是任务栏吗???
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
恩,是的
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

14
 
if(hbmStMenuBackGround)
{
    HBITMAP hOldBitmap = NULL;
    HDC hdcmem         = CreateCompatibleDC(lpdis->hDC);
    if(hdcmem)
    {
        hOldBitmap = (HBITMAP)SelectObject(hdcmem, hbmStMenuBackGround);
        BitBlt(...);
        SelectObject(hdcmem, hOldBitmap);
        DeleteDC(hdcmem);
    }
}

创建的新内存DC中,默认有一个像素的BITMAP,所以每次选新的bitmap时,要把旧的保存起来,每次删除时,要把这个一像素的old bitmap选回去再删除。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

15
 
你是说没有删除hOldBitmap吗?呵呵
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

16
 
没仔细看清楚你的代码,是呀,这里应该把旧的先保存起来,不然,hdcmem也是删不掉的
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

17
 
什么呀
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

18
 
支持搂主,收藏
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表