右下のポップアップメニューの左上座標は? – プログラミング – Home

右下のポップアップメニューの左上座標は...
 
通知
すべてクリア

[解決済] 右下のポップアップメニューの左上座標は?


siva
 siva
(@siva)
ゲスト
結合: 13年前
投稿: 7
Topic starter  

仮にデスクトップの表示サイズが800×600であった場合に左上座標を750,550で
指定してTrackPopupMenuを実行すると
(ポップアップメニューのサイズはだいたい100×200ぐらいとします)
ポップアップメニューは右下隅に入りきる様に表示さてしまいこちらが指定した
座標とポップアップメニューの左上座標が合わなくなってしまいます。

表示されたポップアップメニューの左上座標を得るためにはどうすればよいで
しょうか?


引用未解決
トピックタグ
Alq3
 Alq3
(@Alq3)
ゲスト
結合: 15年前
投稿: 28
 

GetMenuItemRectでポップアップメニューのサイズを測定
⇒はみ出す場合は自力で計算する
というのはどうでしょう。


返信引用
siva
 siva
(@siva)
ゲスト
結合: 13年前
投稿: 7
Topic starter  

GetMenuItemRectを使いパラメータを
ビューのウィンドウハンドル
ポップアップメニューのハンドル
ID指定は0
CRectのアドレス
の設定では帰ってきたデータがフレームウィンドウが使用中のメニューの0番項目の
左上座標(スクリーン座標)サイズは(0,0)であり

上記のビューのウィンドウハンドルをNULLで指定すると、リターンコードがFALSEにな
りデータは取得できません。

あと自力計算をしようかとも思ったのですがポップアップメニューのフォントサイズが
判らなくて計算が出来ません、実測では高さが16ドット・セパレータの場合8ドット
でしたがこれはメインで使用しているXPマシンの場合で別のWIN7の場合は普通の項目は
19ドット、セパレータは9ドットでした。

ちなみにメニューをオーナードロー設定したところMEASUREITEMの設定はなしでDRAWITEM
時に矩形の高さが18ドットになっていました。


返信引用
ロマ
 ロマ
(@ロマ)
ゲスト
結合: 18年前
投稿: 170
 

メニュー表示中ならば、
たとえば WM_MENUSELECTで GetMenuItemRectから取り出すことができます。

TrackPopupMenu呼出し後で表示前ならば
WM_INITMENUPOPUPでEnumWindowsからクラス名=#32768のウィンドウを見つけ、
この段階ではウィンドウの大きさはいい加減なので、
ウィンドウをサブクラス化し、
WM_WINDOWPOSCHANGINGが来るのを待つ。
1回目のWM_WINDOWPOSCHANINGでは
 SWP_NOOWNERZORDER|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE
2回目のWM_WINDOWPOSCHANGINGでは
 SWP_NOOWNERZORDER|SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE
が来る。
こんな感じになると思います(少しめんどい)。

TrackPopupMenuの呼び出し前だと、
SPI_GETNONCLIENTMETRICSからfontを求めるのかなぁ。
これは試していません。


返信引用
siva
 siva
(@siva)
ゲスト
結合: 13年前
投稿: 7
Topic starter  

TrackPopupMenu後のWM_INITMENUPOPUPでFindWindowしてサブクラス化し
1回目のWM_WINDOWPOSCHANINGで
ポップアップウィンドウのサイズが来るので保存し
2回目のWM_WINDOWPOSCHANGINGで
ポップアップウィンドウの表示位置がくるのでこちらの都合のいい位置へ変更し
マウスカーソルも座標を変更してポップアップウィンドウの一番トップのメニューアイ
テムの位置にマウスカーソルをセットすることが出来ました。
ちょっと入院していたので返事が遅くなりました、有難うございました


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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