ウインドウサイズを変更しても描画領域が変わらない(Win32API)

このQ&Aのポイント
  • ウインドウサイズの変更がうまくいかない問題について
  • ブラウザウインドウのサイズ変更に関して問題が発生している
  • ウインドウサイズと描画領域の関連性について解説
回答を見る
  • ベストアンサー

ウインドウサイズを変更しても描画領域が変わらない(Win32API)

@ITの http://www.atmarkit.co.jp/fwcr/special/custom_browser/01.html を参考にブラウザを作ろうと思っています. 上記記事中のソースコード http://www.atmarkit.co.jp/fwcr/special/custom_browser/code.html#02 をコピペしてビルドしたところ,確かにブラウザになったのですが,ウインドウサイズの変更がうまくいきません. ウインドウ縁をドラッグしたり,最大化ボタンをクリックしてサイズの変更をしても,描画領域は変更されないのです. (例えば) ・アプリ起動時に300x300のウインドウが生成,yahoo.co.jpが表示される ・縁をドラッグして450x450にする ・ウインドウは大きくなるものの,300x300の範囲にしかyahooが表示されない(スクロールバーの位置も変わらない) といった具合です. どうすればウインドウサイズとともに描画領域も変化するようになるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★『WM_SIZE』メッセージ(ハンドラ)などを処理すること ・ウインドウのサイズを変更したときに、ブラウザ画面をウインドウサイズに合わせて  いないためです。スクロールバーの位置が変わらないのはその為です。  ぱっと見た限りでは『WM_SIZE』メッセージを処理していないようです。 ・『WM_SIZE』メッセージでウインドウのサイズが変化したときに、ブラウザ画面をその  サイズに合うように再設定する必要があります。→『MoveWindow』や『SetWindowPos』  API関数でサイズを変更できます。 ・もう一度、ソースを良く見直してから『WM_SIZE』メッセージ(ハンドラなど)の処理が  記述されていないときは、『WM_SIZE』メッセージでサイズの変更を処理して下さい。 最後に: ・なお、再描画はされていると思います。  ですのでウインドウ縁をドラッグしたり、最大化ボタンをクリックしてサイズの変更が  発生したときに、『WM_SIZE』メッセージ内で描画領域のサイズを自分で変更させる必要が  あるのです。 ・『MoveWindow( hWnd, 横位置, 縦位置, 横サイズ, 縦サイズ, TRUE );』 ・『SetWindowPos( hWnd, NULL, 0, 0, 横サイズ, 縦サイズ, (SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW) );』 ・以上。おわり。

shapeshifter
質問者

お礼

回答ありがとうございます。 おっしゃる通り、問題はウインドウプロージャにありました。 おかげさまで解決できました。

その他の回答 (1)

  • noro6677
  • ベストアンサー率21% (34/158)
回答No.1

ソース途中で読むのがめんどくさくなったので ソース以前の問題。 Windowサイズ変更した後、再描画の処理されている?

shapeshifter
質問者

お礼

お礼を投稿したつもりが、できていなかったようです。 申し訳ありません。 問題はウインドウプロージャにありました。 回答してくださってありがとうございました。

関連するQ&A

  • WIN32APIアプリでツールバー/スステータスバーの表示切り替え

    VC++6.0のwin32sdkで、MFCのSDI標準テンプレートのようにメニューでツールバー,ステータスバーを切り替えるアプリケーションにしたいと思います。 以下のようなコードにしていますが、このままでは表示非表示を切り替えた場合、中央ウインドウのサイズが変更されません。 ドラッグして全体のサイズを変更すると中央メインウインドウも正常な表示になりますが、なにか中央のウインドウを再描画する処理が必要と思われます。その再描画処理についてご教示くださいますようお願いします。 1)ステータスバーの高さ,ツールバーの高さをグローバル変数にする 2)メニューからのメッセージでこのグローバル変数を表示(夫々のバーの高さ)、非表示(夫々のバーの高さ=0)を切り替える。 3)WndProcのWM_SIZEで中央メインウインドウをMoveMindowする [グローバル変数] ---------------------------------------------- static int bShow = 16;//ステータスバーの高さ(非表示は0) static int tbShow = 25;//ツールバーの高さ(非表示は0) ---------------------------------------------- [LRESULT CALLBACK WndProcの一部] ----------------------------------------------- case WM_SIZE: ...... MoveWindow(中央のハンドル, 0, tbShow, LOWORD(lp), HIWORD(lp)-tbShow-bShow, TRUE); break; -----------------------------------------------

  • pcモニターの描画領域を拡大したい

    2台pcを持っていますが、1台がIE表示時に描画領域が狭く! もう一台の描画領域と比較すると不便で、スクロールしないと全体を見れません。設定の変更方法を伝授願います。 宜しくお願いします。

  • VisualC++におけるメインウィンドウの領域に子ウィンドウを配置する際に発生する問題

    メインウインドウの領域に子ウインドウを作成し、その子ウインドウの領域にオブジェクトを表示しようとしています。 そこで、子ウインドのプロシージャに描画するソースを書いているのですが、子ウインドウの描画領域には何も表示されず、親ウインドウの描画領域に表示されてしまいます。 どうすれば子ウインドウの領域に描画することができるのでしょうか? 説明の至らない点もあると思いますが、わかる方いらっしゃいましたら宜しくお願い致します。

  • ウインドウのサイズ変更、移動ができません

    Windows7 Professional 32bitを使用しているのですが ウインドウをマウスで移動、サイズ変更が出来なくなってしまいました。 マウスの右クリック、キーボードのショートカット(Alt+Space)のメニューで移動や、サイズ変更を選ンだ場合、キーボードで操作すれば移動、サイズ変更ともに正常に動作します。 最大化、最小化ボタンも正常に機能します。 マウスの場合、ウインドウの縁にマウスポインターを持っていくと、サイズ変更の矢印ポインターに表示は変わりますが、マウスの左ボタンを押しても枠が選択されず、ドラッグしても、通常のポインターに戻ってしまいます。 移動に関しては十字矢印のポインターにも変わりません。 原因は多分registryboosterというレジストリーエラーを修正してくれるというソフトのせいだと思います。 このソフトにリストアがあったのでリストアしてみましたが戻りませんでした。 どなたか、この問題の解決法をご存じないでしょうか? よろしくお願いいたします。

  • ウインドウのサイズ変更、移動ができません。

    Windows7 Professional 32bitを使用しているのですが ウインドウをマウスで移動、サイズ変更が出来なくなってしまいました。 マウスの右クリック、キーボードのショートカット(Alt+Space)のメニューで移動や、サイズ変更を選ンだ場合、キーボードで操作すれば移動、サイズ変更ともに正常に動作します。 最大化、最小化ボタンも正常に機能します。 マウスの場合、ウインドウの縁にマウスポインターを持っていくと、サイズ変更の矢印ポインターに表示は変わりますが、マウスの左ボタンを押しても枠が選択されず、ドラッグしても、通常のポインターに戻ってしまいます。 移動に関しては十字矢印のポインターにも変わりません。 原因は多分registryboosterというレジストリーエラーを修正してくれるというソフトのせいだと思います。 このソフトにリストアがあったのでリストアしてみましたが戻りませんでした。 どなたか、この問題の解決法をご存じないでしょうか? よろしくお願いいたします。

  • Windowsでウィンドウのサイズ変更をしたいのですが…

    Windowsでウィンドウのサイズ変更をしたいのですがサイズが通常変更できないウィンドウでもサイズ変更ができ、サイズを変更してもウィンドウ内で隠れる部分などがなく縮小した感じで表示できるツール又は方法はありませんか?

  • Win32APIでウィンドウ内のレイアウトを変更

    Visual C++ 2008で,Win32APIを使い, キーボードショートカットでウィンドウを指定した場所へ配置するソフトウェアを実装しました. (Ctrl + Shift + T で現在のウィンドウ全部をタイリングする,などです) これ自体はSetWindowPosで簡単にできるのですが, ウィンドウ内のレイアウトを移動する機能を追加したくて今回質問いたしました. たとえばファイルエクスプローラは, 左側に縦長で フォルダの階層構造での表示領域, 右側に大きく 現在のフォルダの内容を表示する領域 があります. このレイアウトを,たとえば「左側の領域の横幅が130ピクセル未満であれば130ピクセルにする」などといった処理を行いたいです. 他にもウィンドウ内を区切るバーを持ったソフトがありますが(Visual Studioなど),これを移動させてレイアウトを変更する方法はあるのでしょうか? もしご存じの方がいらっしゃれば,ご教示いただければ幸いです. どうぞよろしくお願いいたします.

  • ウィンドウのサイズ変更が出来ない。

    ウィンドウのサイズ変更が出来ない。 自分は普段はwin使ってるんですが、だからまだmacは不慣れなのです、、、 miってフリーソフトを落として、起動してしばらく使っているうちに、なんかの手違いでウィンドウを大きくし過ぎて、サイズを変更できなくなりました。 画面を最大化しようが、普通サイズにしようが、ウィンドウを上に持っていこうとしてもシステムバー(?)で突っかかって、それでも画面が1~2行分ぐらい画面外に下に潜って、ウィンドウ右下のサイズを変える部分をドラック出来ない状況です。 一応作業ファイルを余分に改行すれば全文見れるのですが、やはり不便です。 なんとか、サイズを変更して画面内に収まるように出来ないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Mac
  • ウィンドウのサイズ変更

    Windows 10の質問です。 マウスでウィンドウの大きさ変更するための右下の隅ですが、 (添付画像の赤い四角の右下の隅)赤い場所の何処からドラッグしても サイズ変更できる様に出来ないでしょうか。 タッチ操作やペン操作で使っているときに掴みづらくて困っています。

  • Flashサイズぴったりにウィンドウを開く

    Javascriptのwindow.openを使って、新規ウィンドウを開く方法を行っているのですが、ブラウザによって開くサイズが異なります。 どのブラウザでも<body>タグ内のサイズぴったりにウィンドウを開く方法はありますでしょうか? <body>タグ内は ・余白はすべて0 ・サイズが1024x768のFLASHのみ 要はbody表示範囲を1024x768(px)にしてウィンドウを開きたいのですが、どんな方法がありますか? またその方法はどのブラウザに対応していますか?