ピクチャーボックス上のみでポップアップメニューを表示させるには?


ユウタロウ  2003-10-31 19:34:22  No: 52371  IP: [192.*.*.*]

おはようごじゃる!
VC6.0のダイアログベースでランチャーを作っているのですが
ピクチャーボックス上のみでポップアップメニューを表示させるやり方がわからないので教えていただきたいです。
現在は、次のような形で作っています。
void CLauncherDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
{
  // TODO: この位置にメッセージ ハンドラ用のコードを追加してください

  CMenu    menu;
    menu.LoadMenu(IDR_MENU1);    /* IDR_MENU1はResourceViewで追加したメニュー */
    menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
    // DestroyMenu()はCMenuデストラクタから自動的に呼び出されます。
  
}ポップアップメニューを表示させるところまではできたのですが、
ピクチャーボックス上のみで表示させるには何を使えばいいのですか?

動作環境は  Win98SEです

編集    削除
瀬戸っぷ  2003-10-31 21:23:40  No: 52372  IP: [192.*.*.*]

> ピクチャーボックス上のみでポップアップメニューを表示させるやり方がわからないので教えていただきたいです。
> 現在は、次のような形で作っています。
> void CLauncherDlg::OnContextMenu(CWnd* pWnd, CPoint point) 

実行時のスクリーン座標が渡されるのですから、
CWnd::WindowFromPoint()かCWnd::ChildWindowFromPoint()で調べるコトが出来ると思いますが。

編集    削除
ユウタロウ  2003-11-04 09:59:57  No: 52373  IP: [192.*.*.*]

void CLauncherDlg::OnRButtonDown(UINT nFlags, CPoint point) 
{
  // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
    POINT pt ;
    GetCursorPos( &pt );
    CWnd* hWnd = ChildWindowFromPoint( pt );
    if(hWnd == NULL){
      m_flg = FALSE;
      return;
    }
    m_flg = TRUE;
  CDialog::OnRButtonDown(nFlags, point);
}


void CLauncherDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
{
  // TODO: この位置にメッセージ ハンドラ用のコードを追加してください
  if(m_flg == FALSE){
    m_flg = TRUE;
    return;
  }

  CMenu    menu;
    menu.LoadMenu(IDR_MENU1);    /* IDR_MENU1はResourceViewで追加したメニュー */
    menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
    // DestroyMenu()はCMenuデストラクタから自動的に呼び出されます。
  
}

のようにやってみたのですが上手くいきません。アドバイスお願いします。
ちなみにm_flgはBOOLがたでフラグを作り使用しています。

編集    削除
tetuo  2003-11-04 18:16:02  No: 52374  IP: [192.*.*.*]

>POINT pt ;
>GetCursorPos( &pt );

こんなことしなくても引数のpointを使えばいいと思いますよ。


>if(hWnd == NULL)
NULLじゃなくてピクチャーボックスのCWndクラスへのポインターと
比較しなければ。


というか、クラスウィザードでピクチャーボックスの
WM_RBUTTONUPイベントハンドラを追加して
そこにポップアップメニューのコードを書けばいいような。

編集    削除