最近有些網友反映流動巴士版圖VC 在 WM6.5 上無法呼叫右邊選單的問題,我覺得有必要在這裡說一下。
首先,有這個問題的系統並不是 WM6.5,而是 WM6.5.1 (即組建由 22xxx 以後的版本)。這些版本皆為微軟的內部測試版本,並未在任何原裝的官方 ROM 裡被使用。
其實這種問題並不是只在我的程式上出現,WM6.5.1 對於一部份程式也會有選單問題,例如選單裡只顯示一個項目等。
我目前不會 (也不能) 修正這個問題,因為兩個原因:
1. 這個問題只在未正式釋出的系統版本才會出現,而且在那些系統中按下硬體選單鍵還是正常的。如果是我的程式碼有問題,那麼硬體選單鍵應該出現同樣問題。但硬體選單鍵正常就代表是系統的 bug 了。
2. 我的選單程式碼是非常標準的,我實在看不出是哪裡出現問題。有興趣的可以看一下 (程式碼請跳轉後觀看)。
所以遇到問題的網友請諒解這個問題的本質及我一直沒有行動的原因。
(以下是 WndProc() 裡 WM_CREATE 訊息的選單初始化程式碼)
case WM_CREATE:
{
#ifdef WINCE
SHMENUBARINFO mbi;
memset(&mbi, 0, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = hWnd;
mbi.nToolBarId = IDR_MENU;
mbi.hInstRes = g_hInst;
mbi.dwFlags=SHCMBF_HMENU;
if (!SHCreateMenuBar(&mbi))
{
g_hWndMenuBar = NULL;
}
else
{
g_hWndMenuBar = mbi.hwndMB;
}
// shell アクティベート情報のストラクチャを初期化します。
memset(&s_sai, 0, sizeof (s_sai));
s_sai.cbSize = sizeof (s_sai);
SHDoneButton(hWnd,SHDB_SHOW);
#else
DeleteMenu(GetSubMenu(GetMenu(hWnd),1),ID_MULTIA2B,MF_BYCOMMAND);
#endif
g_hWndMain=hWnd;
CreateMainWindowItems(hWnd);
LoadPrefs();
ImmDisableIME(0);
}
break;