ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 23:26

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




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2009年11月16日(月) 01:30 
オフライン

登録日時: 2006年6月02日(金) 18:20
記事: 106
例えばビットマップビューワなどで、新たにビットマップファイルを
読み込んだ時、ウインドウサイズがたまたま変わらない場合などに、
SetWindowPos命令を行ってもリサイズ・イベントが実行されない
ということがあります。
もちろんウインドウサイズ自体はそのままでも良いかも知れませんが、
諸々の付随するもの、スクロールバーなどはリサイズ・イベントへ
飛んでくれないと再描画されず、表示がおかしくなってしまいます。

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

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

調べていてこんなページを見つけましたが、、、
http://oshiete1.goo.ne.jp/qa1502910.html


通報する
ページトップ
投稿記事Posted: 2009年11月16日(月) 22:46 
オフライン

登録日時: 2005年7月19日(火) 07:02
記事: 183
お住まい: 宮城県
どういうコーディング(コード設計)をしているかによって、対処方法は様々だと
思うのですが、MoveWindow命令や、InvalidateRgn命令あたりを
調べてみてはいかがでしょうか?

たとえば、InvalidateRgn( hMainWnd, NULL, TRUE ) とすると、
窓hMainWnd全体に対して再描画を実施することが出来ます。


通報する
ページトップ
投稿記事Posted: 2009年11月17日(火) 01:40 
オフライン

登録日時: 2006年6月02日(金) 18:20
記事: 106
レスありがとうございます。
うまく行ってないのは、何よりスクロールバーの表示ですね。
(単純なビットマップ・ビューワと仮定して頂いて、
「ファイルを開く」から選んだ画像ファイルをメインウインドウの
クライアントエリアに表示するという基本的なものですが)

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

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

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

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

とりあえずスクロールバーの表示については(バタついてますが)
上の方法でやろうと思っています。
何か、こうした方がいいということがありましたらまた是非教えて下さい。
レスありがとうごさいました。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

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


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot], Google [Bot] & ゲスト[24人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

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