是否有win32函数在创建窗口后更改窗口的样式?我想更改CreateWindowEx
中指定的样式标志。具体来说,我想将标准窗口转换为没有边框且没有调整大小的窗口。
答案 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);