2017-02-02 9 views
0

WTLアプリケーションでCWindowImpl FullScreenを設定するにはどうすればよいですか?私はMFC SDI CViewのフルスクリーンのサンプルアプリケーションで探しています

https://www.codeproject.com/Articles/9632/Views-in-Full-Screen-Mode

私はWTLアプリケーションでフルスクリーン設定のソースコードをテストし、それが働いていません。

私はSetWindowPlacement()/ GetWindowPlacement()関数を使用する必要がありますか?

void toggle_fullscreen() 
{ 
    if (b_fullscreen == false) 
    { 
    b_fullscreen = true; 
    save_window = this->GetParent(); 
    const HWND hwnd = GetDesktopWindow(); 
    this->SetParent(hwnd); 
    RECT rect; 
    ::GetWindowRect(hwnd, &rect); 
    //m_view.SetWindowPos(hwnd, rect.left, rect.top, rect.right, rect.bottom, SWP_SHOWWINDOW); 
    //m_view.SetWindowPos(HWND_TOPMOST, 0, 0, 4096, 2000, SWP_SHOWWINDOW); 
    //m_view.ShowWindow(SW_MAXIMIZE); 
    this->SetWindowPos(HWND_TOPMOST, 0, 0, 1920, 1080, SWP_SHOWWINDOW); 
    } 
    else 
    { 
    b_fullscreen = false; 
    //m_view.SetParent(save_window); 
    this->SetParent(save_window); 
    } 
} 

EDIT:

感謝!実際に私はソースコードを見つけました。 (Czarek Tomczakのおかげで)

Win32: full-screen and hiding taskbar

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg) 
    { 
    case WM_CLOSE: 
    DestroyWindow(hwnd); 
    break; 
    case WM_RBUTTONDOWN: 
    printf("full screen\n"); 
    break; 
    case WM_DESTROY: 
    PostQuitMessage(0); 
    break; 
    default: 
    return DefWindowProc(hwnd, msg, wParam, lParam); 
    } 
    return 0; 
} 

HWND CreateFullscreenWindow(HWND hwnd) 
{ 

    WNDCLASSEX wc; 
    wc.cbSize = sizeof(WNDCLASSEX); 
    wc.style = 0; 
    wc.lpfnWndProc = WndProc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance = (HINSTANCE)::GetModuleHandle(NULL); 
    wc.hIcon = NULL; 
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); // (HBRUSH)(COLOR_WINDOW + 1); 
    wc.lpszMenuName = NULL; 
    wc.lpszClassName = L"fullscreen"; 
    wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 
    RegisterClassEx(&wc); 

HMONITOR hmon = MonitorFromWindow(hwnd, 
            MONITOR_DEFAULTTONEAREST); 
MONITORINFO mi = { sizeof(mi) }; 
if (!GetMonitorInfo(hmon, &mi)) return NULL; 
return CreateWindowEx(NULL, 
     TEXT("fullscreen"), 
     TEXT(""), 
     WS_POPUP | WS_VISIBLE, 
     mi.rcMonitor.left, 
     mi.rcMonitor.top, 
     mi.rcMonitor.right - mi.rcMonitor.left, 
     mi.rcMonitor.bottom - mi.rcMonitor.top, 
     hwnd, NULL, wc.hInstance, 0); 
} 
+0

toggle_fullscreen()はどのメンバーですか? –

+0

私はVS 2013でcodeproject mfcサンプルをコンパイルしようとしましたが、それはとても古いので、私にユニコードに関するエラーが出ます。 –

答えて

1

iはSetWindowPlacement()...機能を使用する必要がありますでしょうか?

あなたはそうする必要はありません。このSetWindowPosと他のAPI関数は、すべて同じことです:特定のモニターに対応する座標を完全にカバーするようにウィンドウの位置を変更し、そのウィンドウを最前面に設定します。これにより、「フルスクリーン効果」が作成されます。

あなたが見つけたコードでは、デスクトップウィンドウのハンドルを使用して、ウィンドウを子供としてドッキングします。これはうまくいくかもしれませんが、私はそれをやりません - 私は標準的なポップアップウィンドウを作成し、ボーダレスとキャプションなしで、代わりにそれを元に戻す必要はありません。私はむしろ "通常の" UIとフルスクリーンのポップアップフレームヘルパーウィンドウの間で子ウィンドウを再親したいと思います。

+0

通常のウィンドウと作成されたポップアップウィンドウの間の親が本当に素晴らしいアイデアです! – sailfish009

関連する問題