Thread: How to change window style at runtime?

  1. #1
    Mr. Bitmap
    Guest

    Question How to change window style at runtime?

    How can I change window style at runtime? I have created the window with the style WS_OVERLAPPEDWINDOW and I want, after the user presses spacebar, to change that style to something else like WS_OVERLAPPED or WS_POPUP???

    Thanks

  2. #2
    Mr. Bitmap
    Guest
    Oh, btw, I forgot to add: I tried to achieve this with the "SetWindowLong" function but no luck

  3. #3
    ¡Amo fútbol!
    Join Date
    Dec 2001
    Posts
    2,138

    The SetWindowLong function changes an attribute of the specified window. The function also sets a 32-bit (long) value at the specified offset into the extra window memory of a window.

    LONG SetWindowLong(

    HWND hWnd, // handle of window
    int nIndex, // offset of value to set
    LONG dwNewLong // new value
    );
    Parameters

    hWnd

    Identifies the window and, indirectly, the class to which the window belongs.

    nIndex

    Specifies the zero-based offset to the value to be set. Valid values are in the range zero through the number of bytes of extra window memory, minus 4; for example, if you specified 12 or more bytes of extra memory, a value of 8 would be an index to the third 32-bit integer. To set any other value, specify one of the following values:

    Value Action
    GWL_EXSTYLE Sets a new extended window style.
    GWL_STYLE Sets a new window style.
    GWL_WNDPROC Sets a new address for the window procedure.
    GWL_HINSTANCE Sets a new application instance handle.
    GWL_ID Sets a new identifier of the window.
    GWL_USERDATA Sets the 32-bit value associated with the window. Each window has a corresponding 32-bit value intended for use by the application that created the window.
    The following values are also available when the hWnd parameter identifies a dialog box:

    Value Action
    DWL_DLGPROC Sets the new address of the dialog box procedure.
    DWL_MSGRESULT Sets the return value of a message processed in the dialog box procedure.
    DWL_USER Sets new extra information that is private to the application, such as handles or pointers.
    dwNewLong

    Specifies the replacement value.

    Return Values

    If the function succeeds, the return value is the previous value of the specified 32-bit integer.
    If the function fails, the return value is zero. To get extended error information, call GetLastError.
    If the previous value of the specified 32-bit integer is zero, and the function succeeds, the return value is zero, but the function does not clear the last error information. This makes it difficult to determine success or failure. To deal with this, you should clear the last error information by calling SetLastError(0) before calling SetWindowLong. Then, function failure will be indicated by a return value of zero and a GetLastError result that is nonzero.

    Remarks

    The SetWindowLong function fails if the window specified by the hWnd parameter does not belong to the same process as the calling thread.
    If you use the SetWindowLong function and the GWL_WNDPROC index to replace the window procedure, the window procedure must conform to the guidelines specified in the description of the WindowProc callback function.
    Calling SetWindowLong with the GWL_WNDPROC index creates a subclass of the window class used to create the window. An application should not subclass a window created by another process. The SetWindowLong function creates the window subclass by changing the window procedure associated with a particular window, causing Windows to call the new window procedure instead of the previous one. An application must pass any messages not processed by the new window procedure to the previous window procedure by calling CallWindowProc. This allows the application to create a chain of window procedures.

    Reserve extra window memory by specifying a nonzero value in the cbWndExtra member of the WNDCLASS structure used with the RegisterClass function.
    You must not call SetWindowLong with the GWL_HWNDPARENT index to change the parent of a child window. Instead, use the SetParent function.
    Hope it helps. Looks like it should.

  4. #4
    Mr. Bitmap
    Guest

    Unhappy

    Yeah, I tried that but that didn't help.

    SetWindowLong(hWnd, GWL_STYLE, WS_OVERLAPPED);

    The app become unclickable and I could see other controls trough it

  5. #5
    Registered User
    Join Date
    May 2002
    Posts
    50
    I've had that happen before... try ShowWindow(). That worked for me. Different reason but the same effect. I could see other windows through my program and I couldn't click anything on it.

  6. #6
    Mr. Bitmap
    Guest

    Talking Thanks

    Thanks, that worked

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Just starting Windows Programming, School me!
    By Shamino in forum Windows Programming
    Replies: 17
    Last Post: 02-22-2008, 08:14 AM
  2. WM_CAPTION causing CreateWindowEx() to fail.
    By Necrofear in forum Windows Programming
    Replies: 8
    Last Post: 04-06-2007, 08:23 AM
  3. Pong is completed!!!
    By Shamino in forum Game Programming
    Replies: 11
    Last Post: 05-26-2005, 10:50 AM
  4. System
    By drdroid in forum C++ Programming
    Replies: 3
    Last Post: 06-28-2002, 10:12 PM
  5. Tab Controls - API
    By -KEN- in forum Windows Programming
    Replies: 7
    Last Post: 06-02-2002, 09:44 AM