1

ウィンドウクラスをフルスクリーンにしようとしていますが、うまくいきません。黒くちらつくだけで、フルスクリーンにはなりません。ソースコードは次のとおりです:-

void InitEngine::Init(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd, DesktopScreenInfo * ScreenInfo, LPSTR WindowName)
{
    mWindoClass = new WNDCLASSEX();
    ZeroMemory(mWindoClass,sizeof(WNDCLASSEX));
    if(ScreenInfo) mScreenInfo = ScreenInfo;
    else mScreenInfo = &DesktopScreen::GetScreenInfo();

    mWindoClass->cbSize        = sizeof(WNDCLASSEX);// window size
    mWindoClass->style         = CS_HREDRAW | CS_VREDRAW; // so it draw when Horizontal or Vertical change
    mWindoClass->lpfnWndProc   = WindowProc;
    mWindoClass->hInstance     = hInstance;
    mWindoClass->hCursor       = LoadCursor(NULL, IDC_ARROW); //load normal cursor
    mWindoClass->hbrBackground = (HBRUSH)COLOR_WINDOW;
    mWindoClass->lpszClassName = "PoPEngineClass";

    DEVMODE screen;
    memset(&screen,0,sizeof(screen));
    screen.dmSize = sizeof(screen);
    screen.dmPelsWidth = mScreenInfo->Width;
    screen.dmPelsHeight = mScreenInfo->Height;
    screen.dmBitsPerPel = mScreenInfo->ScreenDepth;
    screen.dmDisplayFrequency = mScreenInfo->FrameRate;
    screen.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
    ChangeDisplaySettings(&screen, CDS_FULLSCREEN);

    RegisterClassEx(mWindoClass);

    WindowHandel = CreateWindowEx(NULL , mWindoClass->lpszClassName , WindowName , WS_POPUP, 0 , 0, mScreenInfo->Width, mScreenInfo->Height, NULL, NULL, hInstance, NULL);
    ShowWindow(WindowHandel, nShowCmd);
    UpdateWindow(WindowHandel);

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
4

1 に答える 1

0

ChangeDisplaySettingsは、フラグの名前が誤解を招く可能性があるにもかかわらず、実際にはウィンドウを全画面表示にしません。ウィンドウを全画面表示にするには、基本的に自分で一連の作業を行う必要があります。

  • 古い位置を覚えている
  • ウィンドウスタイルを変更して、境界線とタイトルバーを削除します
  • 画面サイズを取得し、画面を覆うようにウィンドウの新しい位置を設定します
  • 他のウィンドウの上に配置します(後者の2つはSetWindowPos呼び出しで実行できます)。

SOの他の場所でこの同じ質問に対するいくつかの答えがあります-しかし、それらには問題があります。代わりに、これに関するRaymond Chenのブログエントリを読むことをお勧めします。タスクバーをフルスクリーンウィンドウで覆うにはどうすればよいですか?-上記の私のリストで彼が行っていることの違いは、既存のウィンドウを変更せずに新しいウィンドウを作成していることです。これは、古い位置を記憶/復元する必要がないことを意味するため、実際にはより適切なアプローチです。

ChangedisplaySettingのCDS_FULLSCREENフラグには、別の意味があります。呼び出しは、ウィンドウをフルスクリーンにするのではなく、表示モード設定を変更するためのものです。ただし、フラグはモード変更が一時的なものであることをウィンドウに通知しているため、保存しないでください。たとえば、特定の解像度で動画を再生するアプリが全画面表示になる場合、実際の画面解像度を動画に一致するように変更したい場合がありますが、それは全画面表示である限りです。または、OpenGLゲームなどがこれを使用して、特定の解像度でフルスクリーンで実行されていることを確認する場合があります。つまり、実際には「表示設定をこれらに変更しますが、フルスクリーンにするためにこれを行っているので、変更を永続的にしないでください」という意味です。レイモンドチャンは、このフラグについてもう少しブログに書いています。。画面の解像度設定を気にせず、ウィンドウがすべての画面領域を占めるようにしたい場合は、この呼び出しは必要ありません。

于 2012-09-09T22:25:05.333 に答える