SetWindowLong & GWL_STYLE



  • Hallo Leute gibt es bei dieser Methode vielleicht einige Dinge, die ich beachten muss ??

    Ich habe gemerkt, dass wenn ich mit dieser Funktion den Style verändere bevor es das erste mal gezeichnet wurde, erscheint das Fenster nicht einmal mehr in der Task - Leiste !!! 😕



  • Beispielcode bitte!



  • 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