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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0708
とあるプログラマタブコントロールの自作6解決


とあるプログラマ

リンク

2019/7/8(Mon) 20:56:44|NO.87839

タブコントロールの自作についてなんですが、現在タブコントロールのプロトタイプまで作ったもののベタな方法でして機能面の拡張や処理負荷等に不安を抱いています。おおよその仕様として、
・フレームとなる部分とページ部分とタイトル(上部のタブ部)に当たるものをbgscrで作成、SetParentでページとタイトル部分をフレームに子ウィンドウで貼り付け
・タイトル部分のクリック時にWM_LBUTTONDOWN割り込みで処理先に移動、ページ部分のウィンドウのZオーダー入れ替えとタイトル部分の再描画
・WM_SETCURSOR割り込みでタイトル部分にカーソルが来たらマウスオーバーのエフェクトを再描画、WM_MOUSELEAVEで再描画
・色やフォントなどを定義したテーマファイルを読み込むことでタブの見た目の変更ができる。
・ページの情報などはモジュール型変数で一括管理

などなんですが、さらに タブのドラッグで順序入れ替え、領域外ドラッグで別ウィンドウとして表示、コマンド等でページの非表示・再表示の切り替え、等の機能を追加するつもりです。
しかしこれらの機能追加となると変数の入れ替えが相当大変だったり、負荷も結構高くなってきてしまいます(タイトル部分のマウスオーバーがWM_SETCURSORを使用しているためカーソルの同じタイトル部分での1ドットの移動だけでも割り込みが入り負荷がかなり高くなる)。
ブラウザや他タブがあるソフトウェアはこういった問題をどう解決しているのでしょうか。HSPはHTML&CSSのように文字"だけ"の変更や背景"だけ"の変更といったことはできずに、文字の変更や背景色の変更だけでもすべて再描画する必要があるため比較的高負荷にはなりがちだと思いますが…
私 HSPやプログラミングはそこまで詳しくなく、こういったタブコントロールの自作は調べてもほとんどヒットしないのでご意見いただけると幸いです…



この記事に返信する


とあるプログラマ

リンク

2019/7/8(Mon) 20:57:49|NO.87840

すみません、長文のためかなり見にくくなってしまいました…



科学太郎

リンク

2019/7/8(Mon) 21:33:31|NO.87841

> 私 HSPやプログラミングはそこまで詳しくなく、
> こういったタブコントロールの自作は調べてもほとんどヒットしないのでご意見いただけると幸いです…
まず、自作する必要があるのか?
Windowsにはタブ・コントロールがありますから。

機能拡張した独自のタブ・コントロールを自作するのが目的か?
サブクラス化で機能追加は可能ですが…。

単純にお勉強目的でタブ・コントロールを自作したいのか?
それならば次の過去ログをどうぞ。

・タブの幅の自動調整
http://hsp.tv/play/pforum.php?mode=pastwch&num=73661

ここのサンプルでは、タブの入れ替えまでは考慮してません。



とあるプログラマ

リンク

2019/7/8(Mon) 22:16:01|NO.87842

>>まず、自作する必要があるのか?
>>単純にお勉強目的でタブ・コントロールを自作したいのか?
タブは現在作っているプログラムに使用するのが目的です。winobjでのタブコントロールはタブのドラッグ移動やテーマによって配色を変える等の機能は難しいので自作をしています。

>>機能拡張した独自のタブ・コントロールを自作するのが目的か?
そうです。作っているソフトはウェブブラウザではありませんが、昨今のブラウザのようにドラッグによる入れ替えや別ウィンドウにする・結合する機能を考えています。



いののて

リンク

2019/7/9(Tue) 21:43:41|NO.87846

自分の過去作のタブ付きのテキストエディタですが、タブはツールバーを使って作りました。
順番入れ替え、配色変更、領域外ドラッグ、ウィンドウ結合ができます。
自由度が高いので、ツールバーをタブとして使うのはおすすめです。
http://dev.onionsoft.net/seed/info.ax?id=1545

用いた手法
●順番入れ替え
 サブクラス化して、ドラッグしたらTB_MOVEBUTTONメッセージで入れ替え。

●見た目をタブにして配色も変更できるようにする
 カスタムドローを使う。
 (アクティブ/非アクティブ/マウスオーバーかどうかの情報がツールバーから来るので、それ通りに描画。
 HSP側は何も考えずに、描画するだけで良い)

●領域外ドラッグ
 ツールバーの外でマウスを放したら、つかんでたタブ(ボタン)を消す。(TB_DELETEBUTTON)
 screen命令やexec命令で新規ウィンドウ。



とあるプログラマ

リンク

2019/7/11(Thu) 00:56:02|NO.87849

>>いののてさん
ツールバーでタブを作れるんですね。今日いろいろ調べて試そうと思ったのですが、自分 サブクラス化やプロシージャなどに関しては無知なので0スタートな状況です…
なので今日明日では基本型まで作って判断することは少し難しいと思います。申し訳ないです。



とあるプロクラマ

リンク

2019/7/13(Sat) 02:51:50|NO.87859

カスタムドローで時間がかかりそうなのでここで一旦質問解決にさせて頂きます。
お二人ともありがとうございました。



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