プロが教える店舗&オフィスのセキュリティ対策術

WindowsXp/BCC5.5の環境でアプリ作りを勉強しています。

「mi.fType = MFT_STRING」として、あらかじめ用意したポップアップメニューに動的にメニューを追加できるのですが、その追加したメニューにビットマップを付加するために、「mi.fType = MFT_OWNERDRAW」で追加したいのです。
しかし、これがうまくいきません。
追加じたいは出来るのですが、メニューIDがWM_MEASUREITEMのところに届いていないみたいで
そのため、オーナードローできずにいます。
つまり、「WM_MEASUREITEM」は飛んできますが、メニューID((UINT) wp)はゼロのままです。
本当は「mi.wID = 1200」を取得したいんです。
そのため、ウインドウメッセージ、WM_MEASUREITEM、WM_DRAWITEMは
飛んできますが、オーナードローができず、困っております。

ポップアップメニュー追加のためのコード(以下抜粋)を記載しています。
どなたか、ご教授できないでしょうか。
宜しくお願いします。

<メニュー追加のためのコード>
memset(&mi, 0, sizeof(MENUITEMINFO));
mi.cbSize=sizeof(MENUITEMINFO);
mi.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
mi.fType = MFT_OWNERDRAW;
mi.wID = 1200;

InsertMenuItem(hSubMenu,0,TRUE,&mi );

以上

A 回答 (1件)

wParamからIDを取得できるのは ComboBoxやListBoxなどのコントロールのようです


メニューの場合 lParamを適切な構造体のポインタにキャストして itemIDで判定するようですよ

WM_MEASUREITEMならばMEASUREITEMSTRUCT
WM_DRAWITEMならば  DRAWITEMSTRUCT
といった具合です


case WM_MEASUREITEM:
  lpMIS = (LPMEASUREITEMSTRUCT)lParam;
  if ( lpMIS->itemID == 1200 ) {
    // 必要な初期設定
  }
  break;
    • good
    • 0
この回答へのお礼

出来ました!
ありがとうございます。
数日悩んでいたので、大変助かりました。
wParamからIDを取得できるのは ComboBoxやListBoxなんですね。勉強になります。

今後とも宜しくお願いします。

お礼日時:2013/02/11 10:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!