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

2021-05-11 12:41:06 字數 3051 閱讀 3545

1、

將工作列提到視窗頂端

wince

的整個視窗分為工作區

workarea

和動作欄

taskbar

,一般預設為動作欄在底端總是顯示在最前面,而工作區

workarea

就是除去動作欄所剩餘的空間,他們的視窗定義都在目錄

public/ shell/oak/myshell/ceshell/explorer/taskbar

裡面,可以找到

taskbar.cpp

和taskbar.hxx檔案在

taskbar.hxx

檔案中有

#define taskbar_height26

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

工作列總在最前

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)

修改後如圖:

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)

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 explorer tas...

如何安裝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歷史上第二次 核心重寫,使...