在PPC和Smartphone上創建自己的Menubar

其實這個是一直想做的事情, 要寫一個Menubar的控件,有了Graphics的抽象層,有了Menubar就可以讓這個控件同時工作在Symbian和Windows Mobile上面了.

 

做這個控件第一件事情就是把系統的Menubar去掉!

在PPC上面還是有點問題的. 當然不顯示這個Bar比較簡單,你只要不調用SHCreateMenu來實例化應該差不多了.但是這個輸入法還是時不時地跳出來.前一個window如果是打開SIP的狀態,切換到我的程序時候,這個SIP總是很突兀地顯示出來. 適用了那些SIP相關的接口都不管用,後來乾脆在主窗口受到WM_ACTIVE消息的時候直接hide SIP窗口,就像下面的代碼這樣:

Smartphone上還有一點不一樣.最開始時候看到的是兩個menubar,一個自己畫的,一個系統默認話的.去掉這個,需要moveWIndow的幫助:在CreateWindow創建完主窗口之後可以Move一下就好了:


注意這裏還動態地取得了當前的平臺,如果是Smartphone就移動,不是的話就不要移動了.不然你的Menubar就畫到屏幕外面去了.

 

第二步就是處理按鍵消息. 這裏比較特殊的一點是SOFT1和SOFT2.也就是VK_F1和VK_F2在默認的情況下是拿不到KEY_DOWN這樣的消息的.你可以拿到的就是KEY_UP. 那怎麼辦呢? 對RegiesterHotkey.

在WM_CREATE消息來的時候就在這裏註冊了Hotkey.那樣到那兩個按鍵按下的時候就來了WM_HOTKEY的消息.那時候的wParam裏面就是你現在的0,1了. 這樣按鍵也就可以了.

 

第三步就是畫了.

爲了畫出一點系統的Menubar的感覺,還是下了一點功夫的:) 把這個高度爲26的bar分成上下2個半去.上半區就是用GradientFill來畫. (這個函數的的參數非常噁心). 可以看到這裏的顏色Red,Green都是16位的.也就是說你的ColorRef取到對應的RGB以後不要忘記左移八位(<<8)!!!!

下面一半就是FillRect就行了.最後把對應的文字透明的畫上去就好了. 在這個MenuItem被選中以後,這個畫法還有不同.文字的顏色要變化.還是GradientFill的方向也要轉變. 總而言之,想一下子非常理想還真不容易! 後面就有一張效果圖. 黃色是被激活着的MenuItem.看着其實自己也挺得意的. 呵呵

image

發佈了70 篇原創文章 · 獲贊 9 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章