HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0822
はなリストボックスとメニューのWM_COMMAND5解決


はな

リンク

2006/8/22(Tue) 00:31:56|NO.2089

こんにちは。
質問です。

http://hsp.tv/play/pforum.php?mode=all&num=2033
この記事を参考に、リストボックスを配置することが出来るようになったのですが、
同時にメニューを配置したとき、
リストボックスにフォーカスが行っていると、WM_COMMANDの割り込み実行で、
メニューが動作しなくなってしまいました。

他のコントロール(ボタンやメニュー自身など)にフォーカスが行っていれば、
大丈夫です。

リストボックスにフォーカスが行っていると、wparamにもlparamにも0が入ってしまって、
メニューアイテムのIDが取れないというのが、具体的な原因みたいです。

これを回避する方法を、どなたか教えていただけないでしょうか。
よろしくおねがいします。



この記事に返信する


kz3

リンク

2006/8/22(Tue) 09:04:30|NO.2091

>リストボックスにフォーカスが行っていると、WM_COMMANDの割り込み実行で、メニューが動作しなくなってしまいました。
メニューはどのように作成しているのかを教えてください。それによって原因と対処が変わるかもです。

一応、『 mod_menu.as + listbox + oncmd 』ではリストボックスにフォーカスがあってもWM_COMMANDのlparamによる送り元の分岐で適切にメッセージを処理できました。



はな

リンク

2006/8/22(Tue) 10:15:35|NO.2092

そうだったんですか……。

メニューは
user32.asで宣言された
CreatePopupMenuや、AppendMenuを使っています。

http://www.geocities.co.jp/Playtown-Yoyo/6130/hsp/hsp_menu.htm
ここを参考にして、色々なオプションつきのメニューアイテムをつけました。

mod_menu.asの中も見てみます!



はな

リンク

2006/8/22(Tue) 10:38:48|NO.2093

HSP標準のlistbox命令で作成したリストボックスなら、問題無いみたいです……。

メニューでは無く、リストボックスのスタイルに問題があるのかもしれませんね。

リストボックスの作成は、上で書いたURLのものをそのまま使わせていただいています。
CreateWindowEx $200, varptr(class), 0, $542109C1, nPosx, nPosy, nWidth, nHeight, hwnd, 0, hinstance, 0

$542109C1って、どんなスタイルが入っているか、私には分からないのですが、調べる方法とかありますか?



kz3

リンク

2006/8/22(Tue) 11:30:40|NO.2096

>$542109C1って、どんなスタイルが入っているか、私には分からないのですが、調べる方法とかありますか?

SDKのヘッダを覗くか、HSP用に移植したものを使うか、多分さくらさんのところにもHSPで使えるように定数を定義したファイルがあるのでは...
ありました。hsp3stdlibにgblconst.as( Global Const )というファイルに書かれています。

今はスタイル名を挙げるのが面倒なので上記ファイルを参照してみてください。( いちいちスタイルの値を覚えていないだけです。見れば分かるので... )
=>HSP-NEXT Home Page(さくらさん):http://www.silkroad.ne.jp/sakura/
=>HSP開発者用ライブラリ

>メニューでは無く、リストボックスのスタイルに問題があるのかもしれませんね。
いや、問題なかったですよ。
再確認ですが『複数選択可能なリストボックスにフォーカスが当たっているとき(例として選択直後)にメニューが動作しない』のですよね?
とりあえずKpanさんのサンプルの次の位置に以下のコードを挿入して試してみてください。

DrawMenuBar hwnd ; これを挿入 winobj "LISTBOX", "", $200, $542109C1, ginfo_winx, ginfo_winy, 0, 0 hList = objinfo(stat,2) repeat 10 sendmsg hList, $0180, 0, "アイテム"+cnt loop oncmd gosub *jump, $111

これでもダメな場合は、再現可能なコードを教えてください。( メニュー項目は必要最低限に )



はな

リンク

2006/8/22(Tue) 12:48:05|NO.2097

ごめんなさい。

kz3さんの言われた通りに、命令を整理していったら、自己解決しました(><)

原因は、WM_COMMAND内で、wparamでの分岐の前に、全てのコントロールオブジェクトをグレイ(無効状態)
にする処理が置かれているせいでした。
無効状態にする処理の前に、wparamを変数に格納して取得するようにしたら、問題は解決しました。

質問するには、ちょっと早とちりでした。
本当にごめんなさい。

一生懸命考えてくださって、ありがとうございました。

今度から、気をつけます。



ONION software Copyright 1997-2023(c) All rights reserved.