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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0111
Endタブコントロールのアイテム項目で右クリックの判定3解決


End

リンク

2016/1/11(Mon) 06:23:55|NO.74093

タイトル通り、タブコントロールのアイテムの上で右クリックされたかの判定をしたいのですが、どうすればできるでしょうか?
ただ、repeat〜loopではなく、oncmd等の割り込み処理でやりたいと思っています。

私的に考えたのですが、もしタブの部分がオブジェクトの集りでしたら、タブの部分のハンドルをどうにか取得し、
WM_PARENTNOTIFYメッセージ等で処理できないかと思いました。


やり方がわかる方教えて頂けますか?

/*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━・ タブコントロールのアイテム右クリック判定 テストプログラム ──────────────────────────────・*/ /*━━━━━━━━━━ マクロ登録 ──────────*/ //----メッセージ用 #define TCM_ADJUSTRECT 0x1328 #define TCM_INSERTITEM 0x1307 #define TCS_MULTILINE 0x0200 ;複数行で表示 #define TCM_DELETEITEM 0x1308 ;タブの削除 #define TCM_GETCURSEL 0x130B ;現在選択されているタブのインデックス #define TCM_SETCURSEL 0x130C ;タブを選択 #define TCM_GETITEMCOUNT 0x1304 ;タブの数を取得 #define TCM_GETITEM 0x1305 ;タブに関する情報を取得 #define TCM_SETITEM 0x1306 ;タブの属性を設定 #define TCM_DELETEALLITEMS 0x1309 ;アイテム全削除 #define WM_SETFONT 0x0030 ;フォントの設定用 /*━━━━━━━━━━ タブコントロールの作成 ──────────*/ //----オブジェクト作成 winobj "systabcontrol32", "", , $52000000 , 400 , 300 ;オブジェクト作成 TabID=stat :TabHwnd=objinfo_hwnd(TabID) ;画面IDとハンドルの取得 //----タブの追加 Text="タブ1" :Frag = 1,0,0,varptr(Text) :sendmsg TabHwnd , TCM_INSERTITEM , 0 , varptr(Frag) Text="タブ2" :Frag = 1,0,0,varptr(Text) :sendmsg TabHwnd , TCM_INSERTITEM , 1 , varptr(Frag) Text="タブ3" :Frag = 1,0,0,varptr(Text) :sendmsg TabHwnd , TCM_INSERTITEM , 2 , varptr(Frag) stop



この記事に返信する


inovia

リンク

2016/1/11(Mon) 09:30:10|NO.74094

タブ関連のメッセージは WM_NOTIFY で飛んでくるので、
それを拾ってあげれば、目的のことができるかと。


/*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━・ タブコントロールのアイテム右クリック判定 テストプログラム ──────────────────────────────・*/ #uselib "user32.dll" #func ScreenToClient "ScreenToClient" int, var /*━━━━━━━━━━ マクロ登録 ──────────*/ //----メッセージ用 #define TCM_ADJUSTRECT 0x1328 #define TCM_INSERTITEM 0x1307 #define TCS_MULTILINE 0x0200 ;複数行で表示 #define TCM_DELETEITEM 0x1308 ;タブの削除 #define TCM_GETCURSEL 0x130B ;現在選択されているタブのインデックス #define TCM_SETCURSEL 0x130C ;タブを選択 #define TCM_GETITEMCOUNT 0x1304 ;タブの数を取得 #define TCM_GETITEM 0x1305 ;タブに関する情報を取得 #define TCM_SETITEM 0x1306 ;タブの属性を設定 #define TCM_DELETEALLITEMS 0x1309 ;アイテム全削除 #define WM_SETFONT 0x0030 ;フォントの設定用 #define WM_NOTIFY 0x004E #define NM_RCLICK (-5) #define TCM_HITTEST 0x130D /*━━━━━━━━━━ タブコントロールの作成 ──────────*/ //----オブジェクト作成 winobj "systabcontrol32", "", , $52000000 , 400 , 300 ;オブジェクト作成 TabID=stat :TabHwnd=objinfo_hwnd(TabID) ;画面IDとハンドルの取得 //----タブの追加 Text="タブ1" :Frag = 1,0,0,varptr(Text) :sendmsg TabHwnd , TCM_INSERTITEM , 0 , varptr(Frag) Text="タブ2" :Frag = 1,0,0,varptr(Text) :sendmsg TabHwnd , TCM_INSERTITEM , 1 , varptr(Frag) Text="タブ3" :Frag = 1,0,0,varptr(Text) :sendmsg TabHwnd , TCM_INSERTITEM , 2 , varptr(Frag) oncmd gosub *ON_WM_NOTIFY, WM_NOTIFY stop *ON_WM_NOTIFY dupptr NMHDR, lparam, 12, 4 // 対象のタブコントロールの場合 if TabHwnd == NMHDR.0 { // 右クリックの場合 if NM_RCLICK == NMHDR.2 { // どのタブアイテムにヒットしているか判定します TCHITTESTINFO = ginfo_mx, ginfo_my, 0 ScreenToClient TabHwnd, TCHITTESTINFO sendmsg TabHwnd, TCM_HITTEST, 0, varptr(TCHITTESTINFO) TabNo = stat dialog "" + (TabNo + 1) + " を右クリックしました" } } return



inovia

リンク

2016/1/11(Mon) 09:32:54|NO.74095




End

リンク

2016/1/11(Mon) 10:01:28|NO.74096

inoviaさんありがとうございます!
WM_NOTIFYで取得できたのですね。



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