玩轉windows mobile選單

2021-05-21 23:31:31 字數 4531 閱讀 2307

1.

wm的選單比較特殊,首先要有乙個放置選單的地方,這就是

menu bar

,乙個視窗,擁有視窗控制代碼(

hwnd

),可以通過

::showwindow();

來顯示和隱藏 a)

系統缺省會建立乙個空的

menu bar

,如在dialog

模式下,

menu bar

上只顯示了乙個輸入法圖示,

// returns menubar owned by a window

hwnd winapi shfindmenubar(hwnd hwnd);

可以獲得當前視窗的

menu bar

控制代碼,這個

menu bar

是系統建立的。值得注意的是,如果需要隱藏這個

menu bar

,最好在視窗初始化的時候

shfindmenubar(hwnd hwnd);

並保留這個控制代碼,以備重新

show

出來,因為如果

menu bar

被隱藏了,再想用

shfindmenubar(hwnd hwnd);

就不行了,返回的是

null。

b) 視窗建立的過程中,可以不使用系統的

menu bar

,自己動態建立

menu bar

,建立menu bar:

shmenubarinfo mbi;

zeromemory(&mbi, sizeof(shmenubarinfo));

mbi.cbsize=sizeof(shmenubarinfo);

mbi.hwndparent=m_hwnd; //

當前視窗的控制代碼

mbi.hinstres=::afxgetinstancehandle();

mbi.dwflags=shcmbf_hmenu|shcmbf_hidesipbutton;//

隱藏sip

mbi.n*******id=idr_mymenu ; //

顯示的選單資源

verify(shcreatemenubar(&mbi));

如果建立成功,

mbi.hwndmb

中記錄的就是

menu bar

的控制代碼,保留使用。因為

shfindmenubar(hwnd hwnd)

並不能返回這個

menu bar

控制代碼,具體原因就不知道了。

2. 有了menu bar

,就可以在上面放置選單了。這裡有兩種情況: a)

只有左右鍵選單,即

left softkey

和right softkey

。不包含有子選單。在這裡可以簡單地理解將

menu bar

理解*******

,left softkey

和right softkey

相當於*******

上的兩個

button。

1>

使某個sk(soft key)

不可用,但是不能改變它的顯示狀態。

::shenablesoftkey(mbi.hwndmb,0,true,false); //

具體參考

msdn

2>

設定softkey

文字資訊

tbbuttoninfo

tbbi ;

memset (&tbbi ,0,sizeof (tbbuttoninfo ));

tbbi .cbsize = sizeof (tbbuttoninfo );

tbbi .dwmask = tbif_byindex |tbif_text

/*|tbif_command*/ ;

tbbi .cchtext = wcslen (text );  //

文字長度

tbbi .psztext = text ;            //文字

::sendmessage (m_hwndmb ,tb_setbuttoninfo ,sk ,(lparam )&tbbi );

3>

修改softkey 狀態

tbbuttoninfo

tbbi ;

memset (&tbbi ,0,sizeof (tbbuttoninfo ));

tbbi .cbsize = sizeof (tbbuttoninfo );

tbbi .dwmask = tbif_byindex |tbif_state

/*|tbif_command*/ ;

// 獲得當前狀態

::sendmessage (m_hwndmb ,tb_getbuttoninfo ,sk ,(lparam )&tbbi );

tbbi .fsstate |= stateadd ;

tbbi .fsstate &= ~statedel ;

::sendmessage (m_hwndmb ,tb_setbuttoninfo ,sk ,(lparam )&tbbi );

fsstate

的值可以是 tbstate_enabled,tbstate_hidden b)

左右鍵選單擁有子選單。獲得左右選單的選單控制代碼(不是

menubar

控制代碼)

// 方法一

tbbutton

tb ;

memset (&tb ,0,sizeof (tbbutton ));

::sendmessage (m_hwndmb ,tb_getbutton ,sk ,(lparam )&tb ); //sk=0,left sk

return (hmenu )tb .dwdata ; //

選單控制代碼。如果沒有子選單,返回0

// 方法二

tbbuttoninfo

tbbi ;

memset (&tbbi ,0,sizeof (tbbuttoninfo ));

tbbi .cbsize = sizeof (tbbuttoninfo );

tbbi .dwmask = tbif_lparam |tbif_byindex ;

::sendmessage (m_hwndmb ,tb_getbuttoninfo ,sk ,(lparam )&tbbi ); //sk=0,left sk

return (hmenu )tbbi .lparam ; //

選單控制代碼。如果沒有子選單,返回0

有了選單控制代碼,就可以對子選單進行操作了。

1>

enablemenuitem  //

mf_enabled, mf_disabled, or mf_grayed

2>

checkmenuitem  //

mf_checked,mf_unchecked

3>

getmenuiteminfoa  //

mfs_checked,mfs_unchecked,mfs_enabled,mfs_hilite,mfs_unhilite

4>

setmenuiteminfoa  //

mfs_checked,mfs_unchecked,mfs_enabled,mfs_hilite,mfs_unhilite

3. 全屏視窗,隱藏輸入法圖示

// 只對top window 有效,所以m_hwnd 必須是top window 控制代碼。如果是frame-view-document 模式,

// m_hwnd 應該是frame 的控制代碼,而不是view 的控制代碼,在dialog 模式,m_hwnd 是dialog 的控制代碼

shfullscreen

(m_hwnd ,shfs_hidesipbutton ));

#define

shfs_showtaskbar             0x0001

#define

shfs_hidetaskbar              0x0002

#define

shfs_showsipbutton           0x0004

#define

shfs_hidesipbutton           0x0008

#define

shfs_showstarticon           0x0010

#define

shfs_hidestarticon           0x0020

4. 隱藏ok 按鍵

bool

shdonebutton (hwnd

hwndrequester , dword

dwstate );

#define

shdb_show                    0x0001

#define

shdb_hide                    0x0002

#define

shdb_showcancel              0x0004

Windows Mobile開發簡介

windows mobile開發簡介 簡單介紹windows mobile上的應用軟體開發過程 os windows mobile windows mobile上的應用軟體開發主要用visual c vb,visual c ide用visual studio 2005以上版本。helloworld ...

windows mobile傳送簡訊

windows mobile傳送簡訊應用分為兩種,一是呼叫windows mobile自有的傳送簡訊視窗,將接收使用者的手機號碼傳遞給該視窗,完成簡訊傳送,另一種是通過呼叫api將文字傳送給指定的號碼,這中傳送方式對於使用者是無感知的視窗簡訊 視窗簡訊實現比較簡單,可以直接使用下面的啟動引數啟動系統...

Windows Mobile 傳送簡訊

windows mobile傳送簡訊應用分為兩種,一是呼叫windows mobile自有的傳送簡訊視窗,將接收使用者的手機號碼傳遞給該視窗,完成簡訊傳送 暫且稱為視窗簡訊 另一種是通過呼叫api將文字傳送給指定的號 碼,這中傳送方式對於使用者是無感知的 暫且稱為無感知簡訊,下面對這兩種方式的實現分...