ポップアップメニューの表示方法について – プログラミング – Home

ポップアップメニューの表示方法について
 
通知
すべてクリア

[解決済] ポップアップメニューの表示方法について


Taro
 Taro
(@Taro)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

はじめまして。 日曜プログラマのTaroと申します。

下記のようにCView.cpp内にコーディングしても
ポップアップがうまく表示されません。
どうすれば良いでしょう?
void CXXXView::OnRButtonDown(UINT nFlags, CPoint point)
{
ClientToScreen( &point );
SetForegroundWindow();
CMenu Popup;
if(Popup.LoadMenu(IDR_POPUPMENU1)!=0){
Popup.TrackPopupMenu( TPM_CENTERALIGN | TPM_LEFTBUTTON,
     point.x, point.y, this);
  }
CWnd::OnRButtonDown(nFlags, point);
}
環境はWindows98SEでVC++SP5パッチをあててます。
基本的な質問ですみません。 よろしくお願いします.


引用未解決
トピックタグ
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

LoadMenuした後にPopupからGetSubMenu()せにゃあかんのでわ?


返信引用
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

Popup.TrackPopupMenu( ... )

CMenu* p = Popup.GetSubMenu( 0 );
p->TrackPopupMenu( ... )

このようにしてみて下さい。


返信引用
Taro
 Taro
(@Taro)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

ありがとうございます。
説明不足ですみませんが実はその方法で
やってみたのですが、lpRectやm_hWndのシンボルが
Error:式を評価できないようです。
なにか他にやることはありますか?
考えられる原因があればよろしくお願いします。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

this ぢゃなくて AfxGetMainWnd() としてみてわ?

メニューを所有するウィンドウは通常CMainFrameですから。


返信引用
さなえ
 さなえ
(@さなえ)
ゲスト
結合: 23年前
投稿: 24
 

Bunさん お久しぶり

私としては
>CWnd::OnRButtonDown(nFlags, point);
が気に入らないのですが。
CView:: じゃないのかな?というのと先にやっちゃえば?
と思うのですが 関係ないかな?

あとリソースのメニューの作り方にコツがなかったですか?


返信引用
Taro
 Taro
(@Taro)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

Popup.TrackPopupMenu( TPM_CENTERALIGN | TPM_LEFTBUTTON,
point.x, point.y, AfxGetMainWnd());
として、リビルドした後に実行してみてのですが、
同じ結果になりました。 なにか他の原因はないでしょうか?


返信引用
Taro
 Taro
(@Taro)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

リソースのメニューの作り方にコツってなんですか?


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>Bunさん お久しぶり

ちわ。お久しゅうごぢぇーます。

>>CWnd::OnRButtonDown(nFlags, point);
>が気に入らないのですが。

あ、ホントだ。

>はじめまして。 日曜プログラマのTaroと申します。

ちわ。

------------------------------------------------------
疑問点1

今日は何曜日?(爆)

疑問点2

右クリックメニューってWM_CONTEXTMENUを使いません?
ClientToScreen()がいらない分だけ、効率的でわあーりませんか。

void ChogeView::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
if (menu.LoadMenu(IDR_MENU1))
menu.GetSubMenu(0)->TrackPopupMenu(
TPM_LEFTALIGN, point.x, point.y, AfxGetMainWnd(), NULL );
}

自分のソースを見たら、アサートもせずに、こんな風で動いてました。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>Popup.TrackPopupMenu( TPM_CENTERALIGN | TPM_LEFTBUTTON,
> point.x, point.y, AfxGetMainWnd());
>として、リビルドした後に実行してみてのですが、
>同じ結果になりました。 なにか他の原因はないでしょうか?

くたくたさんのアドバイス通りの方法でやってますか?

通常サブメニューのポインタを取得するから

p->TrackPopupMenu() という形でアクセスするんぢゃないかな?

これでダメならソースをそっくりのせてみますか?


返信引用
Taro
 Taro
(@Taro)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

a1. 日曜プログラマ->水曜プログラマの間違えでした。

a2. Bunさんのとおりにやってみました。やはりErrorです。
  半日もこの問題にハマってます。助けてください。


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

ちょっと前にもこんなのがありました。
参考になるかもしれません。

ツリービューと右クリックメニューについて
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200204/02040009.txt


返信引用
Taro
 Taro
(@Taro)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

みなさん ありがとうございました。
メニューリソースを削除したのち新しく作り直したら、
無事に走りました。
リソースメニューの作りかたのコツ知りませんでした。
これからもお世話になります。 よろしく。


返信引用
ワルツ
 ワルツ
(@ワルツ)
ゲスト
結合: 23年前
投稿: 21
 

で、lpRectやm_hWndはどっからでてきたのでしょうか?
最初の質問では使用していないようですが。

ちなみに、「Error」というのウォッチ式での話ですよね。
コンパイルもリンクもうまくいき、それで実行してもうまく表示されないんですよね?

あと皆さんがいっているようにGetSubMenuは必須でしょう。
このときに、ウォッチ式に「Error」がでると何かまずいのでしょうか?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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