質問者
タブ付きMDIアプリの最小化からの再表示

質問
-
VC++2010でMFCを使ったWindowsプログラム開発をしています。
MFC アプリケーション ウィザードを使ってアプリケーションを作成する際、デフ
ォルトの設定のままでプロジェクトを作成し、Windows7上で動作させると、背景の
再描画がおかしくなるようです。再現手順としては、
① コンパイルして出来上がったアプリケーションを起動する。
② 「ファイル」→「新規作成」としてドキュメントをもう一つ開く。
③ アプリケーションを最小化する。
④ タスクバー上のアイコンをクリックし、2つあるドキュメントのどちらかをクリ
ックして、画面を再表示します。これだけで、画面が二重になって、中身がずれたような状態になります。
調べてみると、アプリケーション ウィザードの「アプリケーションの種類」で
「マルチ ドキュメント」と「タブ付きドキュメント」をONにしたプロジェクトで
発生するようで、「タブ付きドキュメント」をOFFにすると発生しないようです。
また、開いているドキュメントが一つの場合は発生せず、WindowsXPでも発生しな
いようです。あまりにも簡単に発生するため、「既出では?」と思ったのですが、検索しても見
つかりませんでした。解決方法、もしくはそのポインタをご存じの方がいらっしゃいましたら、教えてい
ただけないでしょうか。よろしくお願いします。
すべての返信
-
こんにちは
MFC アプリケーション ウィザードを使ってアプリケーションを作成する際、デフォルトの設定のままでプロジェクトを作成し、Windows7上で動作させると、背景の再描画がおかしくなるようです。
プロジェクトの新規作成からMFCアプリケーションを選び、完了を押しただけのアプリで試してみましたが、特におかしな症状にはなりませんでした。(Debug/Release 共)
こちらの環境は Windows7/64bit で、VisutalStudio 2010 で試しました。
症状からしますと、グラフィックドライバかあるいはそれに関わる何らかのアプリが影響している感じがします。
電柱一家 -
yominetさん
アドバイス有り難うございます。
ご指摘の設定を変更してみました。
結果から言いますと、
・「デザインを優先する」→× 全く同じ。
・「パフォーマンスを優先する」→Window枠と中身のずれは無くなりました!が、タイトルバーの文字が消えてしまいました。背景も一部変です。
となりました。
次に、「カスタム」にして、一つずつオプションを確認したところ、「ウィンドウとボタンに視覚スタイルを使用する」をOFFにすると、タイトルバーの文字は消えてしまうものの、Window枠と中身のずれが無くなり、かなり改善するようです。
また、逆に「ドラッグ中にウィンドウの内容を表示する」をOFFにすると、WindowをRestoreした時に、再描画してくれない部分が出てくるようです。
ただ、見た目重視のソフトウェアなので、「ウィンドウとボタンに視覚スタイルを使用する」をOFFにはできません。
このような状況から、何か分かる事はありますでしょうか?
私の周りにあるWindows7では、どれでも起こるんですが、どうして皆さんの所では発生しないのでしょう?
とても不思議です。
-
pitchcatさん
確認有り難うございます。
上の書き込みで、「再描画してくれない部分」と言っているのは、まさにその部分です。
私だけの現象ではなかったのですね。良かったです。
Windowの外枠と中身はずれませんでしたか?
実は、CFormViewでViewを作成すると、こちらの環境では背景部分が全部再描画されないので、かなり酷い事になるのです。
何とか修正したいのですが、もし何か思い当たる事があるようでしたら、ご教授ください。
よろしくお願いします。
#あと、やたらと行間が広いのですが、どうすれば良いのでしょう?
#初めての投稿なもので...
- 編集済み PinePine 2011年2月22日 8:46 誤読のため
-
VS2010を持っていないので試せないのと、
正式な技術文書などのソースではなく、経験のみで申し訳ないのですが・・・
DWM(デスクトップコンポジションとかAEROだとかシステム)を利用している場合
XP以前とは描画タイミングやらOSからもらえるWM_PAINTなどがかなり違うようです。
#他のウィンドウに隠れていたウィンドウも、個々にオフスクリーンをもって描画しつづけてるためか
#表にでてもWM_PAINTが飛んでこないとか・・・また、経験上、nVidiaとAMDのグラフィックボードの違いでも差が出たことあります
ので・・・
プロジェクトをつくるときになんかフラグを立て忘れたとか、
ウィンドウを生成するときに必要なフラグがあるとか・・・ではなく、
個々に必要なタイミングで、再描画を促す必要があるかもしれません。>#あと、やたらと行間が広いのですが、どうすれば良いのでしょう?
「Shift+ENTER」です。
ですが、メモ帳などで別に書いてから貼り付けるほうが楽です。 -
yominetさん
情報ありがとうございます。
メニュー操作などを行うと正常な状態に戻るので、yominetさんのおっしゃるよう
に、どこかのタイミングで再描画を促せば簡単に直りそうなのですが、その適切な場
所と方法が分かればと思ってこのフォーラムに書き込みました。
また、原因が分からないのも気持ち悪いですし。Window枠と中身のずれについてですが、その後もう一度画面を見てみますと、中身を
タイトルバーの左上を原点として描画しているようです。
つまり、タイトルバーの位置にツールバーが表示され、中身全体が左上にずれていま
す。ヒントのようなものでも結構ですので、また何か分かりましたら教えてください。
よろしくお願いします。
>>#あと、やたらと行間が広いのですが、どうすれば良いのでしょう?
>「Shift+ENTER」です。
>ですが、メモ帳などで別に書いてから貼り付けるほうが楽です。
なるほど。
それで、私の最初の書き込みは正しく表示されていたのですね。ありがとうございました。
-
-
電柱一家さん
返信有り難うございます。
CFormViewではありませんが、CMainFrameのOnActivateまたはOnActivateAppで、
アクティブになった事を判断した後、
Invalidate();
UpdateWindow();
としてみましたが、全く改善しませんでした。また、
RecalLayout();
Invalidate();
UpdateWindow();
も試してみましたが同じでした。ただし、CMainFrameそのものはちゃんと再描画されているようで、OnActivateの場
合、ツールバーやメニューなどが重なったままですが、タイトルバーは再描画され
ました。症状としては、Windowの中身が左上にずれて、タイトルバー上にツールバーやメニ
ューが重なって表示されている訳ですが、タイトルバー上に描画されているツール
バーやメニューはちゃんと操作が可能で、逆にタイトルバーの右にある最小化、最
大化、クローズのボタンは、中身が上に重なっているため操作ができません。
つまり、タイトルバー上に重なっている中身は、ちゃんとそこに存在しています。
グラフィックカードやドライバなどの問題では、このような状態にならないと思う
のです。また、周りにあるPCも一種類ではなく、NECやPanasonicなど様々なのですが、全て
で発生します。本当に不思議です。
-
SkyDriveなどに画像をUploadして、その画像を右クリックで表示されるメニューからコピーします。
この画面(返信等の編集画面)で右クリックで表示されるメニューから貼り付けます。うまくいかなければ、以下を参考にしてください。
http://social.answers.microsoft.com/Forums/ja-JP/answersfeedbackja/thread/2907d2bd-d218-422c-ac40-284df488845fテスト投稿フォーラムで試してみてください。
-
明らかに変ですね。
Client DCの描画原点がWindow DCの原点になっているような状況ですね。環境が異なるのですが、私も再現手順をもとに確認してみましたが、発生しませんでした。
地道に追うしかなさそうな気がします。
Controlを一つづつ排除しながら、現象の発生を確認しつつ、MFCのSource Codeも含め調査してみては如何でしょうか。
ある程度調査が進んだら、調査内容からKeywordを抽出し、Connectで検索してみてください。
すでに不具合として報告されているかもしれません。>「マルチ ドキュメント」と「タブ付きドキュメント」をONにしたプロジェクトで発生するようで
CMDIChildWndExの処理が気になりますね。ところで、Windows Updateは全て適用されている状態でしょうか。
-
kozzさん
いつも返信ありがとうございます。
Windows Updateはしばらくかけていなかったので、適用後プロジェクトの作成からや
り直してみました。
結果としては、やはり同じでした。
MFCのソースコードを追っかけるのはちょっと気合い(と時間)が必要ですよね。
納期との関係もあるので、時間を見つけて調べてみます。皆さんのところでは発生していないようなので、「問題の発生しない環境」を構築す
れば、何か分かるのではないかと思っています。
その環境でコンパイルすれば良いのであればそれが一番簡単ですし、動作環境に問題
があるのならその条件が分かるのではないかと。引き続き調査は続けていきますので、何か分かりましたら、またこのフォーラムに書
き込みます。