2010-11-26 12 views
0

私はVisual C++(Win32 API)でアプリケーションを持っています。私のアプリケーションでは、メインウィンドウのボーダーは古いウィンドウで表示されます。 wndWc.styleの値をWS_OVERLAPPED、WS_POPUP、およびWinUser.hで与えられているその他の値に変更しようとしましたが、メインウィンドウの外観に変更はありませんでした。すべてのポップアップウィンドウはWindows 7スタイルで表示されます整流することができる。この点についての助力は高く評価されます。メインウィンドウとポップアップウィンドウの両方の画像を添付しました。 alt textVisual C++ Win32 APIのアプリケーションメインウィンドウの境界線のスタイルを変更するには

alt text

コード:

// our window class 
    WNDCLASS wndWc; 
    // --------------------------------------------------------- 
    // fill window class members 
    // --------------------------------------------------------- 
    wndWc.style = CS_GLOBALCLASS; 
    wndWc.lpfnWndProc = (WNDPROC) WndProc; 
    wndWc.cbClsExtra = 0; 
    wndWc.cbWndExtra = 0; 
    wndWc.hInstance = GetModuleHandle(NULL); 
    wndWc.hIcon = NULL; 
    wndWc.hCursor = LoadCursor(0, IDC_ARROW); 
    wndWc.hbrBackground = (HBRUSH)GetStockObject(0); 
    wndWc.lpszMenuName = NULL; 
    wndWc.lpszClassName = "XYZ"; 


    // register class 
    if (!RegisterClass(&wndWc)) return false; 
    // --------------------------------------------------------- 

    // get actual screen resolution 
    int iSw = (WORD)GetSystemMetrics(SM_CXSCREEN);  // height 
    int iSh = (WORD)GetSystemMetrics(SM_CYSCREEN);  // height 

    // make a rectangle on the center of the screen 
    RECT rc = {(iSw - iWidth)/2, (iSh - iHeight)/2, width, height}; 

    // create the window. the spaces on the window title 
    // are just to make sure this will be visible when the region 
    // is active. just run the app and you'll understand. =) 
    hWnd = CreateWindow("XYZ", "XYZ", 
         WS_OVERLAPPEDWINDOW, 
         CW_USEDEFAULT,CW_USEDEFAULT, width,height, 
         NULL, NULL, GetModuleHandle(NULL), NULL); 
+1

コードを投稿するのがベストですが、助けになる方法はわかりません。 –

+1

「古いウィンドウスタイル」とはどういう意味ですか?たぶん、スクリーンショットをどこかに置くことがあります。正確に何がうまくいかないかによっていくつかの異なる意味があります。例えばそれはWin95のウィンドウの境界線、またはVista/Win7の境界線のように見えますが、ガラスはありませんか?または、他の何か? –

+0

参考のために画像を添付しました。 –

答えて

3

EXEが以前のOSバージョンの互換モードで動作するようにフラグが設定されている可能性があります。 EXEを右クリックして[プロパティ]を選択し、[互換性]タブですべてがオフになっていることを確認します。 (特に「視覚テーマを無効にする」と「用...互換モードでこのプログラムを実行する」)

をそれに失敗...

それは全く何もする必要はことは珍しいですが、開始時にこれを試してくださいAPPの:|

SetThemeAppProperties(STAP_ALLOW_NONCLIENT STAP_ALLOW_CONTROLS)

問題が解決しない場合は、あなたのウィンドウのテーマを設定し、明示的にしてみてください。

SetWindowTheme(hWndを、 "WINDOW"、NULL);

FWIW、「Win32プロジェクト」ウィザードを使用して作成された新しいVisual Studio 2008プロジェクトにコードを貼り付け、Windows 7の境界線が表示されました。実際には、境界線を取得するためには通常ではなく、を外出する必要があります。

EXEヘッダーのフラグが正しく設定されていないなど、作成しているEXEに珍しいことがあります。例えばそれがWindowsのGUIアプリケーションであると指定していない場合、またはいくつかのバージョンフィールドがあるかもしれません...

EXEのマニフェストも部分を再生することがありますが、私はマニフェストを完全に削除しようとしましたが、それはおそらくそうではありません。

+0

+1投稿されたコードはわかりやすく表示されますが、それでもまだ機能していない場合は、試してみることの他の良い提案です。 –

1

よく見ると、あなたはそれだけで国境はないことがわかります。閉じるボタンは古いビジュアルスタイルも使用します。したがって、ウィンドウスタイルを変更するだけでは不十分です。あなたのアプリがVistaとAeroに対応していることを示す必要があります

+0

お返事ありがとうございますが、これをどのように行うことができるかのヒントをご提供できます。 –

+0

列挙されたウィンドウスタイルの多くは、システムメニューや閉じる、最大化、最小化ボタンに影響を与えるものを含めて、それ自身が組み合わされたスタイルです。具体的には 'WS_OVERLAPPEDWINDOW'です。 –

関連する問題