【问题标题】:Change Win32 Window Style更改 Win32 窗口样式
【发布时间】:2010-02-18 02:14:09
【问题描述】:

是否有一个 win32 函数可以在创建窗口后更改其样式?我想更改CreateWindowEx 中指定的样式标志。具体来说,我想将标准窗口转换为没有边框且不调整大小的窗口。

【问题讨论】:

    标签: winapi


    【解决方案1】:

    我认为SetWindowLongPtr 应该这样做。请注意,如果您更改了边框样式,则需要在之后致电SetWindowPos,如备注中指出的那样。

    有些样式只在窗口创建时生效,所以不能通过这个调用来设置。 MSDN 通常会调用以后可以设置的样式。

    【讨论】:

      【解决方案2】:
      HWND windowHandle = FindWindow(NULL, L"Various tests");
          SetWindowLongPtr(windowHandle, GWL_STYLE, WS_SYSMENU); //3d argument=style
          SetWindowPos(windowHandle, HWND_TOPMOST, 100, 100, Width, Height, SWP_SHOWWINDOW);
      

      为我做的:D

      【讨论】:

        【解决方案3】:

        您应该在 createwindowex 或 SetWindowLongPtr 中尝试这种窗口样式:WS_POPUPWINDOW|WS_TABSTOP |WS_VISIBLE

        【讨论】:

        • 如果您在创建后更改窗口属性,则需要使用带有正确标志的 SetWindowPos 才能使更新生效。
        【解决方案4】:

        我通过结合使用 SetWindowPosShowWindow 方法来解决它。

        注意必须在此处调用 showWindow,否则将不起作用。

        下面是完整的源代码。只需调用 setConsoleWindowStyle() 方法并设置新的窗口样式。

        #define _WIN32_WINNT 0x0501
        #include <stdio.h>
        #include <windows.h>
        
        LONG_PTR setConsoleWindowStyle(INT,LONG_PTR);
        
        int main()
        {
            LONG_PTR new_style =  WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL;
            setConsoleWindowStyle(GWL_STYLE,new_style);
            return 0;
        }
        
        LONG_PTR setConsoleWindowStyle(INT n_index,LONG_PTR new_style)
        {
         /*The function does not clear the last error information. if last value was zero.*/
         SetLastError(NO_ERROR);        
        
         HWND hwnd_console = GetConsoleWindow();
         LONG_PTR style_ptr = SetWindowLongPtr(hwnd_console,n_index,new_style);
         SetWindowPos(hwnd_console,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_DRAWFRAME);
        
         //show window after updating
         ShowWindow(hwnd_console,SW_SHOW);
        
         return style_ptr;  
        }
        

        【讨论】:

        • ShowWindow 不是必须的,而是将SWP_SHOWWINDOW 传递给SetWindowPos
        【解决方案5】:

        SetWindowLong(hWnd, GWL_STYLE, newStyle); ShowWindow(hWnd, SW_SHOW);

        【讨论】:

        • 如果您解释一下为什么这会起作用而不是仅仅发布函数会很有帮助
        猜你喜欢
        • 2013-02-17
        • 1970-01-01
        • 1970-01-01
        • 2016-01-13
        • 2011-02-09
        • 2021-06-23
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多