ModifyMenuでメニュー修正後GetMenuStringで取得できない – プログラミング – Home

ModifyMenuでメニュー修正後G...
 
通知
すべてクリア

[解決済] ModifyMenuでメニュー修正後GetMenuStringで取得できない


neko
 neko
(@neko)
ゲスト
結合: 20年前
投稿: 8
Topic starter  

WinXP VC6.0 SP2 MFC

起動時に

{
CMenu *pPopup;
VERIFY(menu.LoadMenu(IDR_MENU1));
pPopup = menu.GetSubMenu(0);
pPopup->ModifyMenu(ID_MENU_ITEM_1,
MF_BYCOMMAND,
ID_MENU_ITEM_1,
TEST);
DrawMenuBar();
}

で、メニューにテキストを設定しておいて、
そのメニューをクリックした段階でメニューのテキストを
取得したいのですが、

LRESULT CMenutDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
.
.
.
// wParamにメニューのIDが入る
char cstr[256];
pPopup->GetMenuString(wParam, cstr, 256, MF_BYCOMMAND);
}

GetMenuStringで文字列が取得できません。(NULLでした)
なぜでしょうか?


引用未解決
トピックタグ
おぉう
 おぉう
(@おぉう)
ゲスト
結合: 20年前
投稿: 2
 

ttp://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vclib/html/_mfc_cmenu.3a3a.getsubmenu.asp

>CMenu オブジェクトが存在しない場合、一時的な CMenu オブジェクトが作成されます。
>返された CMenu ポインタを保存しないでください。


返信引用
neko
 neko
(@neko)
ゲスト
結合: 20年前
投稿: 8
Topic starter  

回答ありがとうございます。

省略しましたが、(←分かりづらくて、すいません)
LRESULT CMenutDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
.
.
.
// wParamにメニューのIDが入る
char cstr[256];
CMenu *pPopup;
VERIFY(menu.LoadMenu(IDR_MENU1));
pPopup = menu.GetSubMenu(0);
pPopup->GetMenuString(wParam, cstr, 256, MF_BYCOMMAND);
}

とやっているのですが。。。
駄目です。

変更していないメニューはちゃんと文字列は取得できるのですが、
変更したメニューだけ文字列が取得できないのです。。。
なんででしょうか?・・・(*_*)


返信引用
neko
 neko
(@neko)
ゲスト
結合: 20年前
投稿: 8
Topic starter  

ちょっと色々いじってやって見ました。

あらかじめリソースエディタで
メニューID_MENU_ITEM_1の項目を“DEFAULT”にしておき、

その後
pPopup->ModifyMenu(ID_MENU_ITEM_1,
MF_BYCOMMAND | MF_STRING,
ID_MENU_ITEM_1,
TEST);
とすると
メニューの見た目は“TEST”に変わるけど、
pPopup->GetMenuString(ID_MENU_ITEM_1, cstr, 256, MF_BYCOMMAND);
で取得するとcstrは“DEFAULT”のままでした。

内部のデータが更新されていないようなのですが、
更新の仕方分かりませんか?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> VERIFY(menu.LoadMenu(IDR_MENU1));
> pPopup = menu.GetSubMenu(0);
> pPopup->GetMenuString(wParam, cstr, 256, MF_BYCOMMAND);

ここで、ロードしなおしているのですから、
以前の変更はどこかに行ってしまうでしょう。


返信引用
neko
 neko
(@neko)
ゲスト
結合: 20年前
投稿: 8
Topic starter  

なるほどー!
そういうことですか。

ロードすると一番最初のメニューに戻ってしまうのですね。

おぉうさん、dairygoodsさん
真に回答ありがとうございました!<(_ _)>


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました