私はデスクトップのWindowsアプリケーションのサードパーティプラグインを開発中です。これは基本的に、ホストアプリケーションによってのみアクセスされる従来のDLLです。ホストはAPIに基づいてプラグインのメニュー項目を提供しますが、どのファイルが開いているかに基づいてメニュー項目のテキストを動的に変更してAPIを拡張したいと考えています。ホストは、MDIウィンドウを使用し、私はそれがMFCで開発されたと思います。しかし、私はWin APIを使って直接メニュー項目を変更しようとしています。 (これは、私の質問の一部である問題がある可能性があります。)Win32でホストのメニューを変更するサードパーティのプラグイン
コードは、メニュー項目を初めて変更するときに正しく機能します。しかしその後の変更はメニューには表示されません。変わったことは、GetMenuStringが常に私が設定した値を返すようだということです。つまり、APIレベルでは動作するように見えますが、メニュー項目は変更されません(初めての場合を除く)。
ここでは、メニュー項目のテキストを変更するためのコードです。それはとても基本的です。
MENUITEMINFOW menuInfo;
memset (&menuInfo, 0, sizeof(menuInfo));
menuInfo.cbSize = sizeof(menuInfo);
menuInfo.fMask = MIIM_STRING;
menuInfo.fType = MFT_STRING;
menuInfo.dwTypeData = (LPWSTR)newItemText;
SetMenuItemInfoW (hMenu, idToChange, false, &menuInfo);
MFCはこれを妨害していますか?または、おそらくホストアプリケーションのメニュー操作の特異性?または、メニューを正しく表示するために何か必要なことがありますか?
ホストは、ホストのAPIをバイパスしているため、メニュー項目をオーナー描画していてカスタムテキストの変更を無視している(または検出していない)のでしょうか?どのようにメニュー項目をホストのメニューに追加するのですか? –
ホストは起動時に各メニュー項目のテキストを要求します。 – rpatters1
最も可能性の高い答えは、ホストがメニュー項目をオーナー描画しているか、他の方法でキャッシュしていることです。私は私が間違っているかもしれないことを望んで質問を掲示した。 – rpatters1