Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Полноэкранный режим WinApi


Автор: OutlawZ 2.9.2009, 21:56
Привет всем, помогите перевести программу в полноэкранный режим, прочитал фак тока я не понял там написано для WinApi
Код

Чтобы перевести окно в полноэкранный режим, достаточно:
в WinAPI - вызовом SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_TOPMOST);


Мой код программы:
Код

#include "stdax.h"

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    HWND hMainWnd;
    char szClassName[] = "MyClass";
    MSG msg;
    WNDCLASSEX wc;

    //Ñòðóêòóðà êëàññà îêíà
    wc.cbSize = sizeof(wc);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL,IDI_ASTERISK);
    wc.hCursor = LoadCursor(NULL,IDC_UPARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = szClassName;
    wc.hIconSm = LoadIcon(NULL,IDI_ASTERISK);

    if(!RegisterClassEx(&wc)){
        MessageBox(NULL,"Íå ìîãó ðåãíóòü êëàññ","Îøèáêà",MB_OK);
        return 0;
    }

    //Ñîçäàíèå îêíà
    hMainWnd = CreateWindow(szClassName,"Òðàíñôîðìåð",WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT,0,500,300,(HWND)NULL,
                            (HMENU)NULL,(HINSTANCE)hInstance,NULL);

    ShowWindow(hMainWnd,nCmdShow);
    UpdateWindow(hMainWnd);

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

    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_CLOSE:
        DestroyWindow(hWnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd,uMsg,wParam,lParam);
    }
    return 0;
}


Куда тут прописывать  SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_TOPMOST); , в функцию оконной процедуры?
 smile  smile 

Автор: Cheloveck 2.9.2009, 22:36
Цитата(OutlawZ @  2.9.2009,  22:56 Найти цитируемый пост)
    hMainWnd = CreateWindow(szClassName,"Òðàíñôîðìåð",WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT,0,500,300,(HWND)NULL,
                            (HMENU)NULL,(HINSTANCE)hInstance,NULL);

После здесь. А вообще, лучше юзать CreateWindowEx, там первым параметром расширенные стили.

Автор: OutlawZ 2.9.2009, 23:21
Не получается, попробовал использовать CreateWindowEx но тоже не работает

Автор: 586 3.9.2009, 05:57
Цитата(OutlawZ @  2.9.2009,  22:56 Найти цитируемый пост)
Чтобы перевести окно в полноэкранный режим, достаточно:
в WinAPI - вызовом SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_TOPMOST);

Это показ окна поверх всех окон, а не вывод в полноэкранный режим.
Окно поверх всех окон обычно показывают не с помощью SetWindowLong, а с помощью SetWindowPos:
Код
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

Чтобы растянуть форму на весь экран, нужно:
1. Показать окно поверх всех окон (для того, чтобы панель задач не мешала)
2. Растянуть её на весь экран.
для всего этого, код должен получиться такой:
Код
SetWindowPos(hMainWnd, HWND_TOPMOST, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), 0);

или такой:
Код
hMainWnd = CreateWindowEx(WS_EX_TOSMOST, szClassName,"Òðàíñôîðìåð",WS_OVERLAPPEDWINDOW,
                            0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),(HWND)NULL,
                            (HMENU)NULL,(HINSTANCE)hInstance,NULL);

Автор: Andrey44 3.9.2009, 06:52
Или такой
Код

SendMessage(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)