ab.com コミュニティ https://www.activebasic.com/forum/ |
|
ウインドウサイズとリサイズ・イベントについて https://www.activebasic.com/forum/viewtopic.php?t=2609 |
ページ 1 / 1 |
作成者: | jacoby [ 2009年11月16日(月) 01:30 ] |
記事の件名: | ウインドウサイズとリサイズ・イベントについて |
例えばビットマップビューワなどで、新たにビットマップファイルを 読み込んだ時、ウインドウサイズがたまたま変わらない場合などに、 SetWindowPos命令を行ってもリサイズ・イベントが実行されない ということがあります。 もちろんウインドウサイズ自体はそのままでも良いかも知れませんが、 諸々の付随するもの、スクロールバーなどはリサイズ・イベントへ 飛んでくれないと再描画されず、表示がおかしくなってしまいます。 ヘルプを見ればSetWindowPosのところにはフラグとして "「SWP_FRAMECHANGED」ウィンドウ サイズが変更されない 場合でも、WM_NCCALCSIZE メッセージを送ります。" という意味ありげなものがあるのですが、NCCALCSIZEは 「WM_SIZE」とは違うようもののですし今ひとつどう使うものか 分かりません。 "ウィンドウ サイズが変更されない場合でも、WM_SIZE メッセージを 送ります。"だったらと思うのですが。 ウインドウサイズが変わらないときでもリサイズイベントを 実行させたいのですが良い方法はあるでしょうか? 調べていてこんなページを見つけましたが、、、 http://oshiete1.goo.ne.jp/qa1502910.html |
作成者: | 淡幻星 [ 2009年11月16日(月) 22:46 ] |
記事の件名: | Re:ウインドウサイズとリサイズ・イベントについて |
どういうコーディング(コード設計)をしているかによって、対処方法は様々だと 思うのですが、MoveWindow命令や、InvalidateRgn命令あたりを 調べてみてはいかがでしょうか? たとえば、InvalidateRgn( hMainWnd, NULL, TRUE ) とすると、 窓hMainWnd全体に対して再描画を実施することが出来ます。 |
作成者: | jacoby [ 2009年11月17日(火) 01:40 ] |
記事の件名: | レスありがとうございます。 |
レスありがとうございます。 うまく行ってないのは、何よりスクロールバーの表示ですね。 (単純なビットマップ・ビューワと仮定して頂いて、 「ファイルを開く」から選んだ画像ファイルをメインウインドウの クライアントエリアに表示するという基本的なものですが) プログラムのの設計としては、リサイズ・イベント内で 「SetScrollInfo」でスクロールバーの情報のセットと その表示をしています。 それ以外ではタテヨコ各スクロールバーが動かされたときの イベント処理内でSetScrollInfoを使って再描画していますが、 それ以外にはSetScrollInfoは使用していません。 教えて頂いた「MoveWindow」ですが、再描画フラグ 「bRepaint」をTRUEにしてやってみたのですが、 それによってスクロールバーが再描画されることはこちらでは 確認できませんでした。 どうもやはり「ウインドウサイズが変わらなければWM_SIZEは 出ない」ということのようで、その点については SetWindowPosと同様なのかなと思います。 それから「InvalidateRgn( hMainWnd, NULL, TRUE )」も やってみたのですが、スクロールバーの再描画は出来ません でした。 (もっとも、淡幻星さんの意図した使い方で僕が使ってないから かもしれません) それで、もちろんスクロールバーの再描画ということのみに 絞ればそれこそ必要な時点で「SetScrollInfo」を書いてやれば いいということになるので、とりあえず今は SetWindowPos(又はMoveWindow)命令でウインドウの RECTをセットした時、「リサイズ・イベント」に飛ばない可能性を 考慮して 「以前のサイズと現在のサイズを比べて、変わらない時は SetScrollInfoを実行」 としてどうにかこうにかスクロールバーの更新描画を行っています。 これでもいいかとも思うのですが、、、 それって何ともバタついてるよなぁ、、と、つい思ってしまうんですよね。 多くの場合、ビットマップ・ファイルを読み込めばウインドウサイズは 変化するのでリサイズ・イベントは実行されます。だからその時に、 ムヤミに改めてSetScrollInfoを使ってしまえば二度手間、三度 手間になってしまう。 だからといって、以前のサイズと現在のサイズを比べてどうのこうの ってのはちょっとどうなのかなと。 「SWP_FRAMECHANGED」なんて悩ましいフラグもあったりなんかして。。 とりあえずスクロールバーの表示については(バタついてますが) 上の方法でやろうと思っています。 何か、こうした方がいいということがありましたらまた是非教えて下さい。 レスありがとうごさいました。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |