搜索
bottom↓
回复: 2

wince6.0下调整任务栏和工作区

[复制链接]

出0入0汤圆

发表于 2011-4-24 17:53:43 | 显示全部楼层 |阅读模式
1、  将任务栏提到窗口顶端
WINCE的整个窗口分为工作区WorkArea和动作栏TaskBar,一般默认为动作栏在底端总是显示在最前面,而工作区WorkArea就是除去动作栏所剩余的空间,他们的窗口定义都在目录PUBLIC\ SHELL\OAK\MYSHELL\CESHELL\EXPLORER\TASKBAR里面,可以找到TASKBAR.CPP和TASKBAR.HXX文件
在TASKBAR.HXX文件中有
#define TASKBAR_HEIGHT        26
#define TASKBAR_HEIGHT_AUTOHIDE 5
其中TASKBAR_HEIGHT为动作栏高度,TASKBAR_HEIGHT_AUTOHIDE为自动隐藏高度
在TASKBAR.CPP文件中(第550行)
修改void  CTaskBar::SlideWindow(HWND hwnd, const RECT &rcNew, BOOL fShow)
中的代码:
MoveWindow(hwnd, rcNew.left ,rcNew.top, rcNew.right - rcNew.left,
               rcNew.bottom - rcNew.top, FALSE);
注释掉,后面添加
MoveWindow(hwnd, rcNew.left, 0, rcNew.right - rcNew.left,
               rcNew.bottom - rcNew.top, FALSE);
第二个参数和第三个参数分别定义窗口的左端和顶端开始位置,rcNew.left默认是0,也没有修改的必要,rcNew.top= rcNew.bottom- TASKBAR_HEIGHT,而rcNew.bottom就是整个窗口的高度,所以我们只要修改rcNew.top为0就可以将整个任务栏提到窗口的顶端。
修改完编译过后可以看到这样的模拟器


2、  工作区整体下调TASKBAR_HEIGHT个高度
在修改完TakBar的时候,工作区在顶端是与之重合的,而底端又是有一条高度为TASKBAR_HEIGHT的空隙,所以接下来要修改的是将工作区的位置整体下调TASKBAR_HEIGHT个高度

可以在TASKBAR.CPP中找到函数
void CTaskBar::SetWorkArea(void)
下面是该函数的部分代码:
SetRect(&rcWorkAreaNew, 0, 0,
GetSystemMetrics(SM_CXSCREEN),  GetSystemMetrics(SM_CYSCREEN));
(这里是设置工作区域为全屏大小,类似于MoveWindow,第二个和第三个参数分别定义工作区的左端和顶端开始位置,我们将第三个参数修改为TASKBAR_HEIGHT,将工作区从原来的位置下拉一个任务栏的高度,这样在打开应用程序的时候就不会将被任务栏覆盖)
继续看下面的代码:
if (m_bTaskBarOnTop) //任务栏总在最前
    {
        if (m_bTaskBarAutoHide)//任务栏自动隐藏
        {
//新的工作区大小为底端减去任务栏的自动隐藏高度
           rcWorkAreaNew.bottom -= TASKBAR_HEIGHT_AUTOHIDE;
        }
        else
        {
         //新的工作区大小为底端减去任务栏的高度
            rcWorkAreaNew.bottom -= TASKBAR_HEIGHT;
        }
    }
   // currently, only the bottom will change,如果底端位置变了则执行重新设置工作区的大小
    if (rcWorkArea.bottom != rcWorkAreaNew.bottom)
    {
        SystemParametersInfo(SPI_SETWORKAREA, 0, (void*)&rcWorkAreaNew, SPIF_SENDCHANGE);
    }

从上面的代码我们可以看出工作区的设置是默认为任务栏在下面,然后当任务栏隐藏和自动隐藏不同的情况下只要调整底端高度就可以适应环境,我们现在的情况是任务栏到了顶端,相应的要调节工作区的顶端来适应环境,修改如下:
if (m_bTaskBarOnTop)
    {
        if (m_bTaskBarAutoHide)
        {
            rcWorkAreaNew.top += TASKBAR_HEIGHT_AUTOHIDE;//这里要调节顶端
        }
        else
        {
            rcWorkAreaNew.top += TASKBAR_HEIGHT;    //调节顶端高度
        }
    }

    // currently, only the top will change
    if (rcWorkArea.top != rcWorkAreaNew.top)
    {
        SystemParametersInfo(SPI_SETWORKAREA, 0, (void*)&rcWorkAreaNew, SPIF_SENDCHANGE);
   }
修改后如图:


3、  隐藏任务栏
在\WINCE600\PUBLIC\SHELL\OAK\HPC\EXPLORER\MAIN 目录,打开explorer.cpp 文件,在WinMain 函数里面屏蔽下面代码即可:
/*
// fork off a thread for the taskbar

    hTaskbarSyncEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    if (!hTaskbarSyncEvent)
    {
        goto Cleanup;
    }
    hThread = CreateThread(NULL, NULL, CreateTaskBar, &hTaskbarSyncEvent, 0, NULL);
    WaitForSingleObject(hTaskbarSyncEvent, INFINITE);
    // GetExitCodeThread(); // Test for failure?
    CloseHandle(hThread);
CloseHandle(hTaskbarSyncEvent);
*/
这里完成一个任务栏的创建工作

在网上看到一个好贴 决定实验  放了两天假 编译了多次 也出现不少问题    终于成功隐藏了工具栏 为小成功高兴一下 哈哈 把帖子拿来分享一下 希望有用http://dev.10086.cn/cmdn/bbs/thread-12750-1-1.html 文件夹不是很正确 大家仔细找找 都差不多啊 下一步想实现开机竖屏 就更像手机了 还有疑问 我想通过串口连GSM打电话 不知道手机是这原理不 望高手赐教

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2011-5-21 19:01:03 | 显示全部楼层
顶一下,通过修改shell源码最彻底了,达到DIY开机界面/或者做产品目的,详细的在CSDN博客上的专家也有说明

出0入0汤圆

 楼主| 发表于 2011-5-24 12:15:52 | 显示全部楼层
回复【1楼】songzi2018  
-----------------------------------------------------------------------

知己啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 03:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表