wince6 0下調整工作列和工作區

2021-06-05 21:15:48 字數 2842 閱讀 7584

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就可以將整個工作列提到視窗的頂端。

修改完編譯過後可以看到這樣的模擬器

工作區整體下調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)//

工作列總在最前

else

} // currently, only the bottom will change

,如果底端位置變了則執行重新設定工作區的大小

if (rcworkarea.bottom != rcworkareanew.bottom)

從上面的**我們可以看出工作區的設定是預設為工作列在下面,然後當工作列隱藏和自動隱藏不同的情況下只要調整底端高度就可以適應環境,我們現在的情況是工作列到了頂端,相應的要調節工作區的頂端來適應環境,修改如下:

if (m_btaskbarontop)

else }

// currently, only the top will change

if (rcworkarea.top != rcworkareanew.top)

修改後如圖:

隱藏工作列

在/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)

hthread = createthread(null, null, createtaskbar, &htaskbarsyncevent, 0, null);

waitforsingleobject(htaskbarsyncevent, infinite);

// getexitcodethread(); // test for failure?

closehandle(hthread);

closehandle(htaskbarsyncevent); */

這裡完成乙個工作列的建立工作

最後換個桌布,如下圖:

這裡有個問題就是在修改動作欄的時候,修改的是ctaskbar::slidewindow()函式,從函式功能上來看,該函式是完成乙個視窗逐漸隱藏的乙個功能(類似於qq放在螢幕頂端會自動最小化在頂端),這和函式的名稱滑動視窗是相匹配的,然而在全文件僅有的5個movewindow()函式中只有這個函式下的movewindow()函式修改後才起作用,費解~~~~~  希望達人們賜教~

wince6 0下調整工作列和工作區

1 將工作列提到視窗頂端 wince 的整個視窗分為工作區 workarea 和動作欄 taskbar 一般預設為動作欄在底端總是顯示在最前面,而工作區 workarea 就是除去動作欄所剩餘的空間,他們的視窗定義都在目錄 public shell oak myshell ceshell explo...

如何安裝WinCE6 0

說實話,這個也寫一篇blog,實在不應該。今天重新安裝了wince6.0的開發環境,感覺還是挺累的。所以還是寫一篇吧,這個寫起來比較簡單,也算是這個月最後一篇blog了。下面開始 1.首先安裝visual studio 2005。7.當然,以後如果出了新的補丁,也要繼續打下去了。現在要公升級.net...

wince6 0 開發流程

windows ce概述從6.0版本開始,windows ce的名字改為windows embedded ce,當然這也是為了結合windows embedded品牌作出的改變。ce經過了十年的風風雨雨之後,終於在ce 6.0這個版本上再次浴火重生了。ce 6.0經歷了ce歷史上第二次 核心重寫,使...