[Ttssh2-commit] [7756] TEK ウィンドウのポップアップメニューが正しく表示されない問題を修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2019年 6月 11日 (火) 20:01:58 JST


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;
 	}
 


Ttssh2-commit メーリングリストの案内
Back to archive index