ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 02:05

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - ウインドウサイズとリサイズ・イベントについて
作成者 メッセージ
  記事の件名:  レスありがとうございます。  引用付きで返信する
レスありがとうございます。
うまく行ってないのは、何よりスクロールバーの表示ですね。
(単純なビットマップ・ビューワと仮定して頂いて、
「ファイルを開く」から選んだ画像ファイルをメインウインドウの
クライアントエリアに表示するという基本的なものですが)

プログラムのの設計としては、リサイズ・イベント内で
「SetScrollInfo」でスクロールバーの情報のセットと
その表示をしています。
それ以外ではタテヨコ各スクロールバーが動かされたときの
イベント処理内でSetScrollInfoを使って再描画していますが、
それ以外にはSetScrollInfoは使用していません。

教えて頂いた「MoveWindow」ですが、再描画フラグ
「bRepaint」をTRUEにしてやってみたのですが、
それによってスクロールバーが再描画されることはこちらでは
確認できませんでした。
どうもやはり「ウインドウサイズが変わらなければWM_SIZEは
出ない」ということのようで、その点については
SetWindowPosと同様なのかなと思います。
それから「InvalidateRgn( hMainWnd, NULL, TRUE )」も
やってみたのですが、スクロールバーの再描画は出来ません
でした。
(もっとも、淡幻星さんの意図した使い方で僕が使ってないから
かもしれません)

それで、もちろんスクロールバーの再描画ということのみに
絞ればそれこそ必要な時点で「SetScrollInfo」を書いてやれば
いいということになるので、とりあえず今は
SetWindowPos(又はMoveWindow)命令でウインドウの
RECTをセットした時、「リサイズ・イベント」に飛ばない可能性を
考慮して
「以前のサイズと現在のサイズを比べて、変わらない時は
SetScrollInfoを実行」
としてどうにかこうにかスクロールバーの更新描画を行っています。
これでもいいかとも思うのですが、、、
それって何ともバタついてるよなぁ、、と、つい思ってしまうんですよね。

多くの場合、ビットマップ・ファイルを読み込めばウインドウサイズは
変化するのでリサイズ・イベントは実行されます。だからその時に、
ムヤミに改めてSetScrollInfoを使ってしまえば二度手間、三度
手間になってしまう。
だからといって、以前のサイズと現在のサイズを比べてどうのこうの
ってのはちょっとどうなのかなと。
「SWP_FRAMECHANGED」なんて悩ましいフラグもあったりなんかして。。

とりあえずスクロールバーの表示については(バタついてますが)
上の方法でやろうと思っています。
何か、こうした方がいいということがありましたらまた是非教えて下さい。
レスありがとうごさいました。
投稿記事 Posted: 2009年11月17日(火) 01:40
  記事の件名:  Re:ウインドウサイズとリサイズ・イベントについて  引用付きで返信する
どういうコーディング(コード設計)をしているかによって、対処方法は様々だと
思うのですが、MoveWindow命令や、InvalidateRgn命令あたりを
調べてみてはいかがでしょうか?

たとえば、InvalidateRgn( hMainWnd, NULL, TRUE ) とすると、
窓hMainWnd全体に対して再描画を実施することが出来ます。
投稿記事 Posted: 2009年11月16日(月) 22:46
  記事の件名:  ウインドウサイズとリサイズ・イベントについて  引用付きで返信する
例えばビットマップビューワなどで、新たにビットマップファイルを
読み込んだ時、ウインドウサイズがたまたま変わらない場合などに、
SetWindowPos命令を行ってもリサイズ・イベントが実行されない
ということがあります。
もちろんウインドウサイズ自体はそのままでも良いかも知れませんが、
諸々の付随するもの、スクロールバーなどはリサイズ・イベントへ
飛んでくれないと再描画されず、表示がおかしくなってしまいます。

ヘルプを見ればSetWindowPosのところにはフラグとして
"「SWP_FRAMECHANGED」ウィンドウ サイズが変更されない
場合でも、WM_NCCALCSIZE メッセージを送ります。"
という意味ありげなものがあるのですが、NCCALCSIZEは
「WM_SIZE」とは違うようもののですし今ひとつどう使うものか
分かりません。
"ウィンドウ サイズが変更されない場合でも、WM_SIZE メッセージを
送ります。"だったらと思うのですが。

ウインドウサイズが変わらないときでもリサイズイベントを
実行させたいのですが良い方法はあるでしょうか?

調べていてこんなページを見つけましたが、、、
http://oshiete1.goo.ne.jp/qa1502910.html
投稿記事 Posted: 2009年11月16日(月) 01:30

全ての表示時間は UTC+09:00 です


ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean