更改Win32窗口样式

时间:2010-02-18 02:14:10

标签: winapi

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

5 个答案:

答案 0 :(得分:15)

我认为SetWindowLongPtr应该这样做。请注意,如果您更改了边框样式,则需要稍后调用SetWindowPos,如备注中所述。

某些样式仅在窗口创建期间生效,因此无法通过此调用进行设置。 MSDN通常会调用之后可以设置的样式。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我通过结合 SetWindowPos ShowWindow 方法解决了这个问题。

注意,必须在此处调用 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;  
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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