おはようごじゃる!
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です
> ピクチャーボックス上のみでポップアップメニューを表示させるやり方がわからないので教えていただきたいです。
> 現在は、次のような形で作っています。
> void CLauncherDlg::OnContextMenu(CWnd* pWnd, CPoint point)
実行時のスクリーン座標が渡されるのですから、
CWnd::WindowFromPoint()かCWnd::ChildWindowFromPoint()で調べるコトが出来ると思いますが。
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がたでフラグを作り使用しています。
>POINT pt ;
>GetCursorPos( &pt );
こんなことしなくても引数のpointを使えばいいと思いますよ。
>if(hWnd == NULL)
NULLじゃなくてピクチャーボックスのCWndクラスへのポインターと
比較しなければ。
というか、クラスウィザードでピクチャーボックスの
WM_RBUTTONUPイベントハンドラを追加して
そこにポップアップメニューのコードを書けばいいような。
ツイート | ![]() |