Windows VistaとWindows XPでのクライアント領域の表示に関する問題

このQ&Aのポイント
  • Windows Vista上では問題なく動作するプログラムが、Windows XP上ではクライアント領域が表示されない問題が発生しています。
  • プログラムはウインドウを作成し、計算結果を文字列に変換して表示するシンプルなものです。
  • Windows XP上での動作には設定の変更などが必要なのか、その原因を特定するために助言をいただきたいです。
回答を見る
  • ベストアンサー

クライアント領域が表示されません。

初めて、質問させていただきます。Windows Vista上でVC 2008 Express Editonを使用して、プログラミングしています。内容はいたって簡単で、ウインドウを作成し、そのクラインと領域に計算した結果を、文字列に変換し表示するというだけのものです。それが、Vista上では何ら問題なく動作しそのクラインと領域に意図した通りに文字列も表示されるのですが、Windows XPにてそのコードを実行させますと、文字列どころかクラインと領域そのものが表示されません。表示されるのは、フレームとメニューバーだけです。つまり、デスクトップが透けて見えているのです。XP上で動作させるには、何か設定等が必要なのでしょうか。ちなみに、プログラミングそのものは、WNDCLASSEX、RegisterClassEx、CreateWindowExを使用し、CreateWindowExの後のGetLastError()関数では”この操作をは正しく終了しました。”と出ます。少しごちゃごちゃしてしまいましたが、よろしくお願いいたします。

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

  • ベストアンサー
回答No.2

 こんばんは。  補足に掲載されたコードを試してみましたが、特に問題は無いです。  ともなれば、ウィンドウプロシージャの処理(特にWM_PAINT辺り)に問題があるのではないでしょうか。  実験した環境は、  VisualStudio2008 sp1  Windows XP sp3  です。

Dominico1
質問者

補足

machongolaさん、連絡遅くなりまして申し訳ありませんでした。いろいろ試してみまして、どうもWM_ERASEBKGNDの処理で、問題がありそうです。と言うのは、WM_ERASEBKGNDをコメントアウトしますと、XPの環境でも正常にクラインと領域が表示されたからです。ただ、今度は正常に文字列が表示されなくなってしまいましたが。いずれにしましても、原因がぼんやりですが分かって来ましたので、もう一息頑張ってみます。どうも有難う御座いました。

その他の回答 (1)

回答No.1

UpdateWindowは実行してますか? VistaとXPではデスクトップのウィンドウ表示の仕組みが違うのでUpdateWindowを呼び出さないとクライアント領域が再描画されなかったと思います。 ウィンドウ表示の基本的な処理はこちらを参考に。 http://www.shader.jp/xoops/html/masafumi/ready2.htm

参考URL:
http://www.shader.jp/xoops/html/masafumi/ready2.htm
Dominico1
質問者

補足

Wizard_Zeroさん、早速の回答どうもありがとうございました。もちろん、UpdateWindowを呼び出しております。それでも、XP上でクラインと領域が表示されません。もしかしたら、自分では気付かない間違いを、何かしているのかもしれません。下の方にコードの一部を載せておきます。お気づきの点が御座いましたら、何卒、よろしくお願い申し上げます。 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) {   MSG DSMsg; //メッセージ型   WNDCLASSEX DSWndClsEX; //ウインドウクラス   ATOM DSAtom;   BOOL DSReturn;   DShInst = hInstance;   if (!hPreInst)     {       //クラスの登録      ::ZeroMemory(&DSWndClsEX, sizeof(WNDCLASSEX)); // メモリを0に      DSWndClsEX.cbClsExtra = 0;      DSWndClsEX.cbSize = sizeof(WNDCLASSEX);      DSWndClsEX.cbWndExtra = 0;      DSWndClsEX.hbrBackground = (HBRUSH)(::GetStockObject                                (WHITE_BRUSH));//背景色      DSWndClsEX.hCursor = (HCURSOR)::LoadCursor                                   (NULL,IDC_ARROW); //カーソル      DSWndClsEX.hIcon = ::LoadIcon(DShInst, MAKEINTRESOURCE                        (IDI_ICON1)); //大きいアイコン      DSWndClsEX.hIconSm = ::LoadIcon(DShInst, MAKEINTRESOURCE                        (IDI_ICON1)); //小さいアイコン      DSWndClsEX.hInstance = DShInst;      DSWndClsEX.lpfnWndProc = (WNDPROC)                                          DSParentWndProc; //プロシージャー名      DSWndClsEX.lpszMenuName = _T                                            ("IDR_MENU1"); //メニューの名前      DSWndClsEX.lpszClassName = _T                                             ("DSClsLot"); //クラス名 DSWndClsEX.style = CS_DBLCLKS |                                     CS_HREDRAW | CS_VREDRAW; DSAtom = ::RegisterClassEx                                        (&DSWndClsEX); //ATOM if (DSAtom == 0) //クラスの登録に失敗した時の処理 {   //メッセージを表示して終了する。    ::MessageBox(NULL, _T("ウインドウの作成に失敗致しました。DStを終了致            します。"), _T("DS終了"), MB_OK);    return FALSE; }   //親ウインドウの作成    DSParent = ::CreateWindowEx(WS_EX_WINDOWEDGE, DSWndClsEX.lpszClassName, _T("DS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,NULL, NULL, DShInst, NULL); //親ウインドウを表示する nCmdShow = SW_SHOWNORMAL; //ウインドウ初めて表示する ::ShowWindow(DSParent, nCmdShow); //親ウインドウを更新する ::UpdateWindow(DSParent);

関連するQ&A

  • ボリュームコントロールの通知領域への表示

    windows vistaを使っていますが、画面下の通知領域に今まであったボリュームのアイコンが突然なくなってしまいました。タスクバーを右クリックして、プロパティの通知領域タブのボリュームにチェックを入れようとしましたが、白抜きの文字でチェックができない状態になっています。表示させる方法をどなたか教えてください。よろしくお願いします。

  • RegisterClassExのエラー原因

       こんにちは。 自分は、今、RegisterClassExでWNDCLASSEX構造体を使い、ウィンドウの登録を行っているのですが 戻り値が0でないにも関わらず、その後のGetLastErrorで値が2になっています。 以下がソースコードです。             DWORD last; // ウィンドウクラス登録 wcx.cbSize = sizeof(WNDCLASSEX); wcx.style = 0; wcx.lpfnWndProc = WndProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = hInstance; wcx.hIcon = (HICON)::LoadImage(hInstance,MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON,0,0,LR_DEFAULTSIZE); wcx.hCursor = ::LoadCursor(NULL, IDC_ARROW); wcx.hbrBackground = (HBRUSH)::GetStockObject(BLACK_BRUSH); wcx.lpszClassName = WindowClassName; wcx.lpszMenuName = NULL; wcx.hIconSm = wcx.hIcon; if(::RegisterClassEx(&wcx) == 0) { return FALSE; } last = GetLastError();// 値が2 どうしてエラーでないのに値が2になるのでしょうか? 値が2だと、指定したファイルが見つからないとでますがどうなんでしょうか?

  • 通知領域の表示を変えられない。

    Dellのノートinspiron2200です。 通知領域の各種アイコンの表示、非表示を変更出来なくなってしまいました。 タスクバーと「スタート」メニューのプロパティーで、通知領域のカスタマイズ、動作の選択で「常に表示」「常に非表示」「アクティブでない時に非表示」を選べるはずですが、プルダウンでこの3つの選択肢の表示が出なくなりました。 以前にも、自作PCのXPでも同様になったことがありますが、OSの再インストールで直りましたが、再インストールなしでこの部分の不具合を直す方法を教えてください。 よろしくお願いします。

  • Windows XPのタスクトレイ(通知領域)のアイコンバグ

    Windows XPの通知領域のアイコンが、 常に表示などに決めても勝手に変更されてしまうバグがありますが、 VISTAや7ではこの問題は解決されているのでしょうか?? 教えてほしいです

  • 空き領域が少ないときはどうする?

    コンピュータをクリックしたところ、ハードディスクドライブの表示のところのWindows Vista(C:)とローカルディスク(D:)がありまして、そのうちのWindows Vista(C:)が、空き領域934MB/83.8GBとなっていました。ローカルディスクの方は、197GB/198GBとなっております。 (C:)の方は、934MB/83.8GBということは、ほとんど空きがないといったことでしょうか。こういった場合どのようなことをすればよいのでしょうか。あるいは、この状態にしばらくしておいても差し支えありませんでしょうか。

  • char型の文字列をウィンドウに表示させる。

    c言語のAPIを用いてプログラミングをしているものです。 char*型の文字列をウィンドウに表示させるにはどうしたらいいでしょうか。できれば、例を挙げて教えていただけないでしょうか。 よろしくお願いします。

  • TalesWeaverの表示領域を変更したい(Ver4.62)

    TalesWeaverの対応サイズよりも大きなディスプレイでプレイしたいのですが、TW標準の設定だけでは見やすく表示できません。 フルスクリーンでは引き伸ばしすぎるため、動きが大きくて目が疲れてしまいます。ウインドウモードではキャラクタやチャットの文字が小さすぎてよく見えません。 ・質問  1.ウインドウモードでキャラクタは大きいまま、マップの表示領域を狭く変更したいのですがどうすればいいのでしょうか。単純に解像度を下げるだけだとウインドウサイズも大きくなってしまいフルスクリーンと変わりません。  2.フルスクリーンでマップの表示領域を1920×1200近くまで広くしたいのですがどうすればいいのでしょうか。 ・構成 グラボ nVidia GeForce 9800 ディスプレイ 24型 1920×1200

  • ディスク領域不足の表示が出ます!

    以下の環境です。 OS:Windows Vista PC:Dimension 9200 症状 Windows を立ち上げると、以下の表示が頻繁に出てしまいます。 改善策をご教示下さい。 「ドライブDのディスクの空き領域が少なくなっています。古いファイルや不要なファイルを削除して、ドライブ領域を空けるにはここをクリックして下さい」 因みに、Dドライブの要領は10Gで、確かにその殆どが使用されています。 また、Dドライブのバックアップは時々取っています。 お手数ですが宜しくお願い申し上げます。

  • HomeEditonで壁紙に「Windows XP Home Editon ビルド 2600」と表示される

    Microsoft Windows XP Home Editonで壁紙右下に「Windows XP Home Editon ビルド 2600」と表示されます。パソコン名はPCV-LX85/BPですなぜでしょうか。メーカーソニー。起動時に発生します。メッセージでなくしてほしいです。 

  • Vita Cソドライブの空き領域

    Vistaを再セットアップをしました、空き領域に付いて教えて下さい。 現在のドライブCの空き領域は70% ・60.3GB/83.8GBと表示しています、 ディスクのクリーンアップはしました、 空き領域はこの数値で普通なのですか? ☆再セットアップをすると、Windows Updateが100個以上インストールされたのですが、 Windows UpdateはCドライブの領域を減らすのですか、 初歩的な質問かも判りませんが、宜しくお願いいたします。

専門家に質問してみよう