SetWindowLong & GWL_STYLE



  • Mit SetWindowLong(hwnd, GWL_STYLE, irgendeinStyle); setzt du den Fensterstil auf den angegebenen. Wenn du nur einen anderen hinzufügen willst musst du dir erst mit GetWindowLong(...); die schon vorhandenen holen und mit dem Zusätzlichen Oder-verknüpfen.



  • Ihr wolltet Code ??
    Ich geben euch Code !!!

    #include <windows.h>
    
    #define WIN32_LEAN_AND_MEAN
    
    long __stdcall WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
     switch(uMsg){
     case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
     default:
      return DefWindowProc(hWnd,uMsg,wParam,lParam);
     }
    }
    
    int __stdcall WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd){
     MSG msg;
    
     WNDCLASSEX wc = {0};
     wc.cbSize = sizeof(WNDCLASSEX);
     wc.lpszClassName = "sample";
     wc.hInstance = hInst;
     wc.lpfnWndProc = &WndProc;
     wc.style = CS_HREDRAW|CS_VREDRAW;
     wc.hbrBackground = static_cast<HBRUSH>(GetStockObject(BLACK_BRUSH));
     RegisterClassEx(&wc);
    
     HWND hWnd = CreateWindowEx(0,"sample","Sample",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,640,480,0,0,hInst,0);
    
     // Diese 2 Zeilen bewirken, dass das Programm ein äusserst merkwürdiges Verhalten an den Tag legt !!
     SetWindowLong(hWnd,GWL_STYLE,WS_VISIBLE|WS_POPUP|WS_SYSMENU);
     SetWindowPos(hWnd,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
    
     ShowWindow(hWnd,SW_SHOW);
     UpdateWindow(hWnd);
    
     while(GetMessage(&msg,0,0,0)){
      TranslateMessage(&msg);
      DispatchMessage(&msg);
     }
    
     return msg.wParam;
    }
    

    Kann mir einer sagen, was diese Scheisse soll ???



  • Ui:

    Window Styles

    --------------------------------------------------------------------------------

    The following styles can be specified wherever a window style is required. After the control has been created, these styles cannot be modified, except as noted.



  • Und was soll ich nun machen ? Es geht um eine DirectX - Applikation, welche im Vollbild, sowie im Fenstermodus laufen soll. Es soll auch während der Laufzeit möglich sein, zwischen diesen beiden Modi zu wechseln. Im Vollbild - Modus darf das Fenster keinen Rahmen usw. haben, im Fenster - Modus allerdings schon, wie stelle ich das denn nun an ?

    Gruss Ishildur



  • Probier es doch einfach mal aus - ich denke schon, dass sowas möglich ist 🙄



  • Ja aber wie denn, verdammt noch mal wenn ihr mir sagt, dass man den Style nicht mehr ändern kann, nachdem man das Fenster mit der Funktion CreateWindowEx erzeugt hat !!! 😕 😡 😡 😕

    Sorry, das ist nicht gegen euch gerichte, wohl eher gegen mich selbst. Ich komm einfach nicht weiter. Ich kann nicht weiterprogrammieren, solange die Schnittstelle zur WinApi nicht fehlerfrei ausführbar ist !!

    [ Dieser Beitrag wurde am 21.05.2003 um 21:42 Uhr von Ishildur editiert. ]



  • Vollbildfenster zerstören, neues Fenster erstellen



  • Und wie kann ich dann das Fenster zerstören, wenn einfach jedesmal wieder ein neues erzeugt wird, wenn ich z.B. im Window - Mode das Kreuz in der Rechten oberen Ecke klicke ??



  • So ich habe mir da nun was zusammengehackt, aber wollt mir doch nicht einreden, dass es keine elegantere Lösung gibt ?? 😕

    #include <windows.h>
    
    #define WIN32_LEAN_AND_MEAN
    
    bool g_bExit = false, g_bWindowed = true;
    
    long __stdcall WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
        switch(uMsg){
        case WM_SYSCOMMAND:
            switch(wParam){
            case SC_MAXIMIZE: 
                g_bWindowed = false;
                DestroyWindow(hWnd);
                break;
            case SC_CLOSE:
                g_bExit = true;
            }
            return DefWindowProc(hWnd,uMsg,wParam,lParam);
        case WM_KEYDOWN:
            if(LOWORD(wParam) == VK_RETURN){
                g_bWindowed = !g_bWindowed;
                DestroyWindow(hWnd);
            }
            return 0;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        default:
            return DefWindowProc(hWnd,uMsg,wParam,lParam);
        }
    }
    
    int __stdcall WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd){
        MSG msg;
        HWND hWnd;
    
        WNDCLASSEX wc = {0};
        wc.cbSize = sizeof(WNDCLASSEX);
        wc.lpszClassName = "sample";
        wc.hInstance = hInst;
        wc.lpfnWndProc = &WndProc;
        wc.style = CS_HREDRAW|CS_VREDRAW;
        wc.hbrBackground = static_cast<HBRUSH>(GetStockObject(BLACK_BRUSH));
        RegisterClassEx(&wc);
    
        while(!g_bExit){
         hWnd = CreateWindowEx(0,"sample","Sample",g_bWindowed ? WS_OVERLAPPEDWINDOW : WS_SYSMENU|WS_POPUP,CW_USEDEFAULT,CW_USEDEFAULT,640,480,0,0,hInst,0);
         ShowWindow(hWnd,SW_SHOW);
         UpdateWindow(hWnd);
    
         while(GetMessage(&msg,0,0,0)){
            TranslateMessage(&msg);
            DispatchMessage(&msg);
         }
        }
    
        return msg.wParam;
    }
    




  • Es geeehhhtt !!!! Yeeeeeeeeeeeaaaaaaaaaaaaaaaaaa !!!!!!!!!!
    Daaaanke !!! (Weinend auf den Knien liegend... 🙂 )

    #include <windows.h>
    
    #define WIN32_LEAN_AND_MEAN
    
    long __stdcall WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
        switch(uMsg){
        case WM_KEYDOWN:
            switch(LOWORD(wParam)){
      case VK_LEFT: SetWindowLong(hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW); break;
            case VK_RIGHT: SetWindowLong(hWnd,GWL_STYLE,WS_SYSMENU|WS_POPUP); break;
            default: return 0;
            }
    
            SetWindowPos(hWnd,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED);
            ShowWindow(hWnd,SW_SHOW);
            return 0;
            case WM_SYSCOMMAND:
                if(wParam == SC_MAXIMIZE){
                    SetWindowLong(hWnd,GWL_STYLE,WS_SYSMENU|WS_POPUP);
                    SetWindowPos(hWnd,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED);
              ShowWindow(hWnd,SW_SHOW);
                }
                return DefWindowProc(hWnd,uMsg,wParam,lParam);
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        default:
            return DefWindowProc(hWnd,uMsg,wParam,lParam);
        }
    }
    
    int __stdcall WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd){
        MSG msg;
        HWND hWnd;
    
        WNDCLASSEX wc = {0};
        wc.cbSize = sizeof(WNDCLASSEX);
        wc.lpszClassName = "sample";
        wc.hInstance = hInst;
        wc.lpfnWndProc = &WndProc;
        wc.style = CS_HREDRAW|CS_VREDRAW;
        wc.hbrBackground = static_cast<HBRUSH>(GetStockObject(BLACK_BRUSH));
        RegisterClassEx(&wc);
    
        hWnd = CreateWindowEx(0,"sample","Sample",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,640,480,0,0,hInst,0);
    
        ShowWindow(hWnd,SW_SHOW);
        UpdateWindow(hWnd);
    
        while(GetMessage(&msg,0,0,0)){
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return msg.wParam;
    }
    

    P.S.
    😡 Wer hat noch mal gesat, dass das nicht möglich sein solle ??

    [ Dieser Beitrag wurde am 21.05.2003 um 22:41 Uhr von Ishildur editiert. ]


Anmelden zum Antworten