初めまして、WindowsXPとVisualC++6.0で制作している者です。
開発にはMFC APPWizard(exe)を使用しています。
よくノベル系のゲームに使われている
「800*600のフルスクリーン表示」
を、メニューから選択することによって切り替える機能を実現しようとしています。
今のことろ、ChangeDisplaySettings()によって解像度を切り替えるところまでは上手くいっているのですが、
その後の、SetWindowPos()によってウィンドウの表示位置を修正するところで躓いています。
デバッグでは問題がないのですが、実行時にタスクバーの表示位置分だけウインドウがY軸方向に自動的に縮小されてしまい、結果的にタスクバーが見えてフルスクリーン表示にならなくなってしまうのです。
それで質問なのですが、
SetWindowPos()によるウィンドウのサイズ変更を、タスクバーの影響を受けずに達成するにはどの様にしたら良いのでしょうか?
もし、私の問題がもっと根本的なところにある時は、指摘してくれると嬉しいです。
遅れましたが、私はプログラミング初心者です。よろしくお願いします。
>実行時にタスクバーの表示位置分だけウインドウがY軸方向に自動的に縮小されてしまい
縮小されているのではなく、タスクバーの下に隠れてるだけでは?
HWND_TOPMOSTを指定してますか?
>遅れましたが、私はプログラミング初心者です。
これではあまり意味がありません。
例えば、SDKの経験はあるがMFCは始めたばかり等
具体的に書いたほうがアドバイスしやすいです。
卓球さんお返事ありがとうございます。
ご指摘通り私の力量から書こうと思います…
私は、つい最近VisualC++の入門書を読み終えたばかりです。
SDKの経験も無ければMFCの経験もありません。
入門書に載っているレベルのことなら経験はありますけど。
>縮小されているのではなく、タスクバーの下に隠れてるだけでは?
>HWND_TOPMOSTを指定してますか?
タスクバーの下には隠れていませんでした。
タスクバーの上に多少の隙間を開けて、ウィンドウが表示される状態なんです。もちろんHWND_TOPMOSTの表示もしてあります。
ご指導よろしくお願いします。
> デバッグでは問題がないのですが、実行時にタスクバーの表示位置分だけウインドウがY軸方向に自動的に縮小されてしまい、結果的にタスクバーが見えてフルスクリーン表示にならなくなってしまうのです。
???
デバッグでは問題がない,というのと実行時に云々は矛盾していませんか?
> それで質問なのですが、
> SetWindowPos()によるウィンドウのサイズ変更を、タスクバーの影響を受けずに達成するにはどの様にしたら良いのでしょうか?
手元では問題なく表示できるんですけどね……。
#SDKのみでテストしましたが,MFCの関連コードを見ても特別なことをやっているわけではないですし……。
> タスクバーの下には隠れていませんでした。
> タスクバーの上に多少の隙間を開けて、ウィンドウが表示される状態なんです。もちろんHWND_TOPMOSTの表示もしてあります。
SetWindowPosの挙動をMFC内部まで追ってみてはどうでしょう。
YuOさんお返事ありがとうございます。
その後色々と試してみた結果、
ChangeDisplaySettings()によるディスプレイモードの変更を、新規作成したクラス内で処理させ、後にそれをオブジェクトを作って実行させるという方法で、SetWindowPos()の表示問題を解決できました。
その際に、色々とDEVMODE構造体の設定を変更したので、もしかしたらこの構造体の設定に問題があったのかもしれません…
自己解決という結果になりましたが、
卓球さんにYuOさん、気に掛けていただいてありかどうございました。
>デバッグでは問題がない,というのと実行時に云々は矛盾していませんか?
言葉の使い方を間違えました。
デバッグではなく、ビルドする時にエラーを受けなかったということでした。
ごめんなさい
解決しました
ありがとうございました