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將文字傳送給指定的號 碼,這中傳送方式對於使用者是無感知的 暫且稱為無感知簡訊,下面對這兩種方式的實現分...