ひまわりユーザー プログラム掲示板 バックアップ
注意
ひまわりのススメ  □ ひまわり本家Home  □ 新着記事  □ 新規投稿  □ SEARCH  □ 参考プログラム集
ツリー表示

MESSAGE ポップアップメニュー(修正) /moka (02/04/24(Wed) 11:34) [783]
......MESSAGE ほ、本物だ… /SWinX (02/04/24(Wed) 20:40) [786]
............MESSAGE 問題点 /moka (02/04/25(Thu) 12:35) [793]
..................MESSAGE ちらつき防止案 /SWinX (02/04/25(Thu) 13:13) [795]
........................MESSAGE Re[4]: ちらつき防止案 /北神 陽太 (02/04/25(Thu) 14:27) [796]
..............................MESSAGE 修正しました /moka (02/04/25(Thu) 19:13) [797]


親記事 / ▼[ 786 ]
NO.783  ポップアップメニュー(修正)
□投稿者/ moka -(2002/04/24(Wed) 11:34:45)
□U R L/ http://www.geocities.jp/moka21/teatime/
{---プログラム掲示板投稿フォーム---
【ソフト名】ポップアップメニューサンプル (バージョン 0.3)
【作 成 者】moka (連絡先:moka21@ybb.ne.jp)
   http://www.geocities.jp/moka21/teatime/
【種  別】フリーソフトウェア
【ひまわりのバージョン】ver.1.44aで確認
【転  載】可(転載条件:ご自由に)
【改変運用】可
【ひまわり本体への梱包】可
【実行時に利用作成するファイル】無
【コメント】
   APIを使ったポップアップ(右クリック)メニューです。
   ↓に、簡単なサンプルと解説があります。
   http://www.geocities.jp/moka21/teatime/soft/himawari/popupmenu.html
---投稿フォームここまで---}

「USER32」の、「DWORD GetMenu(DWORD)」を、「?」の、「メニュー取得」として、DLLを利用。
「USER32」の、「DWORD GetSubMenu(DWORD,DWORD)」を、「?,?」の、「サブメニュー取得」として、DLLを利用。
「USER32」の、「DWORD TrackPopupMenu(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD)」を、
「?,?,?,?,?,?,?」の、「ポップアップメニュー表示」として、DLLを利用。

ポップアップメニューを、メニュー作成。
   ポップアップメニューに、変更メニューを、メニュー追加。
      その、イベントは、(
         ダイアログ初期値=リストの、テキスト。
         「変更?」と、尋ねる。
         もし、それ=「」ならば、待機。
         リストの、テキストは、それ。
      )
   ポップアップメニューに、削除メニューを、メニュー追加。
      その、イベントは、(
         (リストの、アイテム)の、(リストの、値)行目を、行削除。
         リストの、アイテムは、それ。
      )
   ポップアップメニューに、区切りメニューを、メニュー追加。その、テキストは、「-」
   ポップアップメニューに、クリアメニューを、メニュー追加。
      その、イベントは、リストの、アイテムは、「」
   
リストを、リストとして、作成。
   その、幅は、620。その、高さは、380。
   その、ファイルドロップは、オン。
   その、アイテムは、ファイル列挙(「*」)。
   その、マウス押した時は、(
      もし、押された特殊キー<>「Right」ならば、待機。
      もし、(リストの、値)=-1ならば、(
         変更メニューの、有効は、オフ。削除メニューの、有効は、オフ。
      )違えば、(
         変更メニューの、有効は、オン。削除メニューの、有効は、オン。
      )
      X=(母艦の、X)+(リストの、X)+マウスX+2。
      Y=(母艦の、Y)+(リストの、Y)+マウスY+21。
      メニューハンドル,2,X,Y,0,(母艦の、ハンドル)の,0の、ポップアップメニュー表示。
   )   

*メニューハンドル取得
(母艦の、ハンドル)の、メニュー取得。
それ、0の、サブメニュー取得。
メニューハンドル=それ。

ポップアップメニューの、可視は、オフ。
母艦浮上。
待機。



▲[ 783 ] / ▼[ 793 ]
NO.786  ほ、本物だ…
□投稿者/ SWinX -(2002/04/24(Wed) 20:40:49)
□U R L/
お見事です。やっぱりWindowsAPI使えると強いですね。
言わせて見て判りましたが、「メニュー取得」や「サブメニュー取得」で
得られたハンドルと、ひまわりが管理する「ポップアップメニューの、ハンドル」は
どうやら別物みたい。
やっぱりちゃんとAPI使って取得しなければいけないのですね^^;

元になるメニューはひまわりで作れるというのがとても便利です。



▲[ 786 ] / ▼[ 795 ]
NO.793  問題点
□投稿者/ moka -(2002/04/25(Thu) 12:35:01)
□U R L/
> 言わせて見て判りましたが、「メニュー取得」や「サブメニュー取得」で
> 得られたハンドルと、ひまわりが管理する「ポップアップメニューの、ハンドル」は
> どうやら別物みたい。
> やっぱりちゃんとAPI使って取得しなければいけないのですね^^;

そうなんですよね。なんでだろう。

あと、ハンドル取得時に、一瞬だけ可視オンにしてるんですけど、
PCや液晶の反応速度によっては目に見えちゃいますし、
もし母艦のリサイズ処理があり、かつメニューバーの大きさが変わる場合は、
無駄なリサイズ処理が呼ばれちゃいますね。
(リサイズ処理を無効にし、またすぐに有効にするか…)



▲[ 793 ] / ▼[ 796 ]
NO.795  ちらつき防止案
□投稿者/ SWinX -(2002/04/25(Thu) 13:13:17)
□U R L/
ちらつくのを抑止するには、

「あらかじめ、ハンドルを取得して変数に保存しておく」

でOKだと思います。

※サンプルとして判りやすいようにあの位置に置いていたのかと思いました^^;




▲[ 795 ] / ▼[ 797 ]
NO.796  Re[4]: ちらつき防止案
□投稿者/ 北神 陽太 -(2002/04/25(Thu) 14:27:05)
□U R L/ http://homepage1.nifty.com/kitagami/index.htm
 ハンドルを取得しておくのはいい案ですね。しかし、オブジェクトを破棄しないように(非表示にして)しないと、変わってしまう恐れが・・・。

 フリッカには、私も悩まされました。解決策は、
1)表示しているか、フラグを立てる
2)フラグがたっていれば、処理をしない
 というやり方になると思います。

 特に、勝手にイベントが発生している場合には有効です(マウスを動かすなど)



▲[ 796 ] / 返信無し
NO.797  修正しました
□投稿者/ moka -(2002/04/25(Thu) 19:13:44)
□U R L/ http://www.geocities.jp/moka21/teatime/
>「あらかじめ、ハンドルを取得して変数に保存しておく」

そうでした。気が付かなかった…。
サンプルを修正しました。
SWinXさん、北神さん、アドバイスありがとうです。



- Child Tree -