ダイアログのリサイズによるコントロールの再配置について

[戻る]
DSLP 2006/12/20(水) 16:25:34
ダイアログのリサイズによるコントロールの再配置を、OnSizeでMoveWindowを利用して
行なっていますが、ダイアログのサイズをすばやく動かしてリサイズすると、表示が異
常になります。ボタンが重なったりスタティックがぼけたりします。また、最大化から
元のサイズに戻す場合も最大化での表示のままダイアログサイズだけ元に戻ります。
ボタンやリストビューの再配置を反映させる方法は無いのでしょうか?

超初心者 2006/12/20(水) 23:05:19
ダイアログがどんなサイズであっても
このコントロールはダイアログの右端から100ドットはなれているとか
そういうことしたいってことですよね。

へんだなあ〜

たいちう 2006/12/21(木) 09:43:42
まず、VCのバージョン、MFC、ダイアログベース等の書きましょう。

次に、新しいプロジェクトでダイアログに最小限のボタンなどを置き、
同じ問題が発生するか確認しましょう。

もし再現するなら話は簡単で、DSLPさんの勘違いを見つけるか、
VCの再インストールということになります。
再現するための最小限の手順を書いてください。

再現しない場合の話は、その後ですね。

通りすがり 2006/12/22(金) 22:13:09
WM_WINDOWPOSCHANGEDやWM_WINDOWPOSCHANGINGを捕まえてwp-
>flags&SWP_NOSIZE見ながらLPWINDOWPOSを元にいぢくる。

通りすがり 2006/12/22(金) 22:16:23
連投すまん。メッセージによっては妙なデータが来ることがあるから不思議ではな
い。なんとなくだが、直前のウィンドウサイズを元に計算してるから変になるのか
と。俺もやった。で、メッセージによってはこれから変えるウィンドウサイズ教えてきた
りするので、気をつける。

dairygoods 2006/12/25(月) 09:55:40
実際に変な位置に移動するのではなく、
単に描画が乱れるのでしたら、こういうこともありえます。

ボタンが、
[OK][Cancel]
のようにならんでいて、これらを右方向にずらすとします。
[OK]、[Cancel]の順に移動させると、
移動量が大きい場合、[OK]が一時的に[Cancel]の上に重なり、
[Cancel]ボタンの外観が乱れます。

簡単な解決策は、子を全部移動したら再描画させることですが、
ちらつくかもしれません。

s.hirayanagi 2007/01/22(月) 16:07:01
そのcontroll をRedrowWindow()すれば直る事があります。

aharen [HomePage] 2007/01/22(月) 17:39:06
過去ログ
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200610/06100042.txt
に似たような件に対して実際にやったソースがあります
ご参考にするとよいと思います

DSLP 2007/01/30(火) 10:46:32
[[解決]]
いろいろとありがとうございました。
複数ウインドウ位置構造体なるものを使用してやりました。
コントロールの位置を一度に更新する方法でやらないと画面の更新で
ちらつきが起きていたようです。

OnSizeがウインドウ作成時にも呼ばれていたので最初はうまくいかなかったのですが、
テストプログラムでいろいろ試してみてナントカ解決できました。

たくさんのご助言、ありがとうございました。
とても参考になりました。

古いスレッドには追加発言できません。