在Windows Mobile中動態修改選單

2021-07-10 02:22:43 字數 1600 閱讀 3483

1、建立並顯示選單,先在資源裡新增選單,然後如下**

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;

shcreatemenubar(&mbi);

2、隱藏選單

hwnd hwnd = ::shfindmenubar(m_hwnd);

if(hwnd != null)

::showwindow(hwnd, sw_hide);

3、隱藏某個子選單

hmenu hmenu = null;

tbbuttoninfo tbbi = ;

tbbi.cbsize = sizeof(tbbuttoninfo);

tbbi.dwmask = tbif_lparam | tbif_byindex;

::sendmessagew(mbi.hwndmb, tb_getbuttoninfo, 1, (lparam)&tbbi); // 0為softkey1,1為softkey2

hmenu = (hmenu)tbbi.lparam;

enablemenuitem(hmenu, idm_test, mf_grayed); // 隱藏子選單

enablemenuitem(hmenu, idm_test, mf_enabled); // 顯示子選單

4、使某個softkey不可用

::shenablesoftkey(mbi.hwndmb, 0, true, false);
如果命令欄是使用mfc方式建立的,這裡的mbi.hwndmb可以使用ccommandbar型別成員變數m_dlgcommandbar.m_hwnd代替。

5、動態修改選單

modifymenu(hmenu, idm_test, mf_disabled | mf_string, idm_test, l"修改後的文字");

insertmenu(hmenu, beforeitem, mf_bycommand, afteritem, l」新增加的選單」); // 加入含有欲改寫文字的選單項

deletemenu(hmenu, beforeitem, mf_bycommand); // 刪除被改寫的選單

drawmenubar(); // 重新整理選單

注意:此hmenu必須使用第三點的方法得到,在mfc方式生成的對話方塊類中的 m_dlgcommandbar.getmenu()得到的hmenu跟第三點裡得到的結果是不一致的,我試過操縱m_dlgcommandbar.getmenu()方式得到的hmenu,結果是選單確實是更改了,但是顯示沒有效果而用第三點的方法得到的hmenu是有效果的。

Windows Mobile中GPRS連線網路

windows mobile程式中如果要使用http或socket連線伺服器,需要先連線網路。可以使用connmgrestablishconnectionsync函式來連線。如果知道乙個接入點的名稱,則可以通過connmgrenumdestinations得到相應接入點的guiddestnet。然後...

Windows Mobile中GPRS連線網路

windows mobile程式中如果要使用http或socket連線伺服器,需要先連線網路。可以使用connmgrestablishconnectionsync函式來連線。如果知道乙個接入點的名稱,則可以通過connmgrenumdestinations得到相應接入點的guiddestnet。然後...

在Windows Mobile上隱藏你的應用程式

有時候,我們需要在windows mobile上做一些invisible的應用程式,使得使用者無法察覺。這幾天找了一些資料,請教了 jake 等一些朋友,下面就做乙個簡單的總結。1.如何逃脫 任務管理器 大家知道,在windows mobile上做自己的應用程式,會在 設定 系統 記憶體 執行的程式...