Revision: 7756 https://osdn.net/projects/ttssh2/scm/svn/commits/7756 Author: maya Date: 2019-06-11 20:01:58 +0900 (Tue, 11 Jun 2019) Log Message: ----------- TEK ウィンドウのポップアップメニューが正しく表示されない問題を修正 (1) [Edit] がメニューになっていなかった - メニューの読み込み元が CTEKWindow::InitMenu() に渡された *Menu ではなく、クラス変数の MainMenu だったため - (4) の修正によりメニューの静的な追加が削除されたため解消 (2) [Help] メニューの中身が [Window] メニューの中身になっていた - [Window] メニューが有効だと、メニューの追加位置がズレることを考慮していなかったため - (4) の修正によりメニューの静的な追加が削除されたため解消 (3) i18n 言語ファイルを使用すると [File] メニューが [Control] になっていた - 読み込む i18n のメッセージが間違っていた - (4) の修正によりメッセージの読み込み処理が削除されたため解消 (4) ポップアップ起動時に、各アイテムに対して行う処理を変更 - CTEKWindow::OnLButtonDown() において、ハードコーディングでメニューを追加していたのを、InitMenu() で読み込んだメニューをループして動的に追加するようにした - CVTWindow::ButtonDown() よりコードを拝借 (5) メニューが i18n 化されない問題を修正 - i18n 化するメニューが CTEKWindow::InitMenu() に渡された *Menu ではなく、クラス変数の MainMenu だったため Modified Paths: -------------- trunk/teraterm/teraterm/tekwin.cpp -------------- next part -------------- Modified: trunk/teraterm/teraterm/tekwin.cpp =================================================================== --- trunk/teraterm/teraterm/tekwin.cpp 2019-06-11 10:47:54 UTC (rev 7755) +++ trunk/teraterm/teraterm/tekwin.cpp 2019-06-11 11:01:58 UTC (rev 7756) @@ -191,10 +191,10 @@ *Menu = ::LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_TEKMENU)); - EditMenu = GetSubMenu(MainMenu,1); - FileMenu = GetSubMenu(MainMenu,0); - SetupMenu = GetSubMenu(MainMenu,2); - HelpMenu = GetSubMenu(MainMenu,4); + FileMenu = GetSubMenu(*Menu,0); + EditMenu = GetSubMenu(*Menu,1); + SetupMenu = GetSubMenu(*Menu,2); + HelpMenu = GetSubMenu(*Menu,4); SetDlgMenuTexts(*Menu, MenuTextInfo, _countof(MenuTextInfo), ts.UILanguageFile); SetDlgMenuTexts(FileMenu, FileMenuTextInfo, _countof(FileMenuTextInfo), ts.UILanguageFile); @@ -407,33 +407,33 @@ // popup menu if (ControlKey() && (MainMenu==NULL)) { - TCHAR uimsg[MAX_UIMSG]; + int i, numItems; + char itemText[256]; + InitMenu(&PopupMenu); - InitMenuPopup(EditMenu); - if (WinMenu!=NULL) { - InitMenuPopup(WinMenu); - } + PopupBase = CreatePopupMenu(); - get_lang_msgT("MENU_CONTROL", uimsg, _countof(uimsg), _T("&File"), ts.UILanguageFile); - AppendMenu(PopupBase, MF_STRING | MF_ENABLED | MF_POPUP, - (UINT_PTR)GetSubMenu(PopupMenu,0), uimsg); - get_lang_msgT("TEKMENU_EDIT", uimsg, _countof(uimsg), _T("&Edit"), ts.UILanguageFile); - AppendMenu(PopupBase, MF_STRING | MF_ENABLED | MF_POPUP, - (UINT_PTR)EditMenu, uimsg); - get_lang_msgT("TEKMENU_SETUP", uimsg, _countof(uimsg), _T("&Setup"), ts.UILanguageFile); - AppendMenu(PopupBase, MF_STRING | MF_ENABLED | MF_POPUP, - (UINT_PTR)GetSubMenu(PopupMenu,2), uimsg); - get_lang_msgT("TEKMENU_VTWIN", uimsg, _countof(uimsg), _T("VT-Wind&ow"), ts.UILanguageFile); - AppendMenu(PopupBase, MF_STRING | MF_ENABLED, - ID_TEKVTWIN, uimsg); - if (WinMenu!=NULL) { - get_lang_msgT("TEKMENU_WINDOW", uimsg, _countof(uimsg), _T("&Window"), ts.UILanguageFile); - AppendMenu(PopupBase, MF_STRING | MF_ENABLED | MF_POPUP, - (UINT_PTR)WinMenu, uimsg); + numItems = GetMenuItemCount(PopupMenu); + + for (i = 0; i < numItems; i++) { + HMENU submenu = GetSubMenu(PopupMenu, i); + + if (submenu != NULL) { + InitMenuPopup(submenu); + } + + if (GetMenuString(PopupMenu, i, itemText, sizeof(itemText), MF_BYPOSITION) != 0) { + int state = GetMenuState(PopupMenu, i, MF_BYPOSITION) & + (MF_CHECKED | MF_DISABLED | MF_GRAYED | MF_HILITE | + MF_MENUBARBREAK | MF_MENUBREAK | MF_SEPARATOR); + + AppendMenu(PopupBase, + submenu != NULL ? LOBYTE(state) | MF_POPUP : state, + submenu != NULL ? (UINT)submenu : GetMenuItemID(PopupMenu, i), + itemText); + } } - get_lang_msgT("TEKMENU_HELP", uimsg, _countof(uimsg), _T("&Help"), ts.UILanguageFile); - AppendMenu(PopupBase, MF_STRING | MF_ENABLED | MF_POPUP, - (UINT_PTR)GetSubMenu(PopupMenu,4), uimsg); + ::ClientToScreen(tk.HWin, &p); TrackPopupMenu(PopupBase,TPM_LEFTALIGN | TPM_LEFTBUTTON, p.x,p.y,0,tk.HWin,NULL); @@ -443,6 +443,7 @@ } DestroyMenu(PopupBase); DestroyMenu(PopupMenu); + PopupMenu = 0; return; }