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でした)
なぜでしょうか?
ttp://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vclib/html/_mfc_cmenu.3a3a.getsubmenu.asp
>CMenu オブジェクトが存在しない場合、一時的な CMenu オブジェクトが作成されます。
>返された CMenu ポインタを保存しないでください。
回答ありがとうございます。
省略しましたが、(←分かりづらくて、すいません)
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);
}
とやっているのですが。。。
駄目です。
変更していないメニューはちゃんと文字列は取得できるのですが、
変更したメニューだけ文字列が取得できないのです。。。
なんででしょうか?・・・(*_*)
ちょっと色々いじってやって見ました。
あらかじめリソースエディタで
メニュー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”のままでした。
内部のデータが更新されていないようなのですが、
更新の仕方分かりませんか?
> VERIFY(menu.LoadMenu(IDR_MENU1));
> pPopup = menu.GetSubMenu(0);
> pPopup->GetMenuString(wParam, cstr, 256, MF_BYCOMMAND);
ここで、ロードしなおしているのですから、
以前の変更はどこかに行ってしまうでしょう。
なるほどー!
そういうことですか。
ロードすると一番最初のメニューに戻ってしまうのですね。
おぉうさん、dairygoodsさん
真に回答ありがとうございました!<(_ _)>