Platform SDK: DirectX

DirectDraw アプリケーションとウィンドウ スタイル

[Visual Basic]

ここでは、C++ でのアプリケーション開発について説明する。

[C++]

アプリケーションがウィンドウ モードで DirectDraw を使う場合、あらゆるウィンドウ スタイルを作成することができる。ただし、フルスクリーン排他モードのアプリケーションでは、予測不可能な動作を生じることなく WS_EX_TOOLWINDOW スタイルを作成することができない。WS_EX_TOOLWINDOW スタイルでは、ウィンドウを DirectDraw のフルスクリーン排他モード アプリケーションで必要とされる最上位ウィンドウとすることができない。

フルスクリーン排他モード アプリケーションでは、適切な表示をするために、WS_EX_TOPMOST 拡張ウィンドウ スタイルと WS_VISIBLE ウィンドウ スタイルを使うようにする。これらのスタイルは、このアプリケーションをウィンドウ Z オーダーの最前列に維持して、GDI がプライマリ サーフェスに描画するのを阻止する。

次の例では、フルスクリーン排他モード アプリケーションで使うウィンドウを確実に準備する方法を示す。

////////////////////////////////////////////////////////
// ウィンドウ クラスの登録とウィンドウの表示
////////////////////////////////////////////////////////
BOOL WINAPI InitApp(INT nWinMode)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize           =    sizeof(WNDCLASSEX);
    wcex.hInstance        =    g_hinst;
    wcex.lpszClassName    =    g_szWinName;
    wcex.lpfnWndProc      =    WndProc;
    wcex.style            =    CS_VREDRAW|CS_HREDRAW|CS_DBLCLKS;
    wcex.hIcon            =    LoadIcon (NULL, IDI_APPLICATION);
    wcex.hIconSm          =    LoadIcon (NULL, IDI_WINLOGO);
    wcex.hCursor          =    LoadCursor (NULL, IDC_ARROW);
    wcex.lpszMenuName     =    MAKEINTRESOURCE(IDR_APPMENU);
    wcex.cbClsExtra       =    0 ;
    wcex.cbWndExtra       =    0 ;
    wcex.hbrBackground    =    GetStockObject (NULL_BRUSH);
 
    RegisterClassEx(&wcex);
 
    g_hwndMain = CreateWindowEx(
                        WS_EX_TOPMOST,
                        g_szWinName,
                        g_szWinCaption,
                        WS_VISIBLE|WS_POPUP,
                        0,0,0,0,
                        NULL,
                        NULL,
                        g_hinst,
                        NULL);
 
    if(!g_hwndMain)
        return(FALSE);
 
    SetFocus(g_hwndMain);
    ShowWindow(g_hwndMain, nWinMode);
    UpdateWindow(g_hwndMain);
 
    return TRUE;
}