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文件
按照此方法做了,但是现在的问题是开始菜单的背景没有修改成功,新添加的菜单也没有图标和字符显示
哦,用的build and sysen之后又make Run-Time Image之后图标和字符串添加进去了,
但是背景怎么还是灰色的?
把菜单背景绘制过程添加在分支中:如下
- ODA_SELECT
- case 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);
- }
- }
-
- if ((lpdis->itemState & ODS_SELECTED) && lpst->idMenuCmd)
- {
- HBRUSH hbrush = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT));
- SetTextColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT));
- FillRect(lpdis->hDC, &rc, hbrush);
- DeleteObject((HGDIOBJ)hbrush);
- }
- else
- {
- HBRUSH hbrush = CreateSolidBrush(GetSysColor(COLOR_MENU));
- SetTextColor(lpdis->hDC, GetSysColor(COLOR_MENUTEXT));
- FillRect(lpdis->hDC, &rc, hbrush);
- DeleteObject((HGDIOBJ)hbrush);
- }
- break;
WinCE500\PUBLIC\SHELL\OAK\HPC\EXPLORER\TASKBAR目录,需要从console中单独编译,否则不可能产生正确的东东。
编译完后,将生成的三个文件(好像是)复制到工程的目标文件目录,再make Run-Time Image。
基本上ok了,只是开始菜单的分阁线有点难看,再研究研究
你啥时候把修改状态栏背景的方法教教,~嘿嘿~~
是啊,要首先查看dir看build all是不是编译了,如果没有就单独编译才行。
第三步,有一个像素的内存泄漏,91program太懒了。
我编译用的build and sysen ,就是花费的时间久
如果只修改WinCE500\PUBLIC\SHELL\OAK\HPC\EXPLORER\TASKBAR中的代码,不用build and sysen 。
单独编译这个目录,将生成的文件复制到工程的目标目录,然后make Run-Time Image
哦,
91program,说说怎么修把状态栏的背景修改成和桌面一致的吧,找了两天资料了,没能找到
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选回去再删除。
没仔细看清楚你的代码,是呀,这里应该把旧的先保存起来,不然,hdcmem也是删不掉的