创建窗口后是否有一种win32函数可以更改窗口的样式?我希望更改在CreateWindowEx
中指定的样式标志。具体来说,我想将标准窗口转换为没有边框和调整大小功能的窗口。
创建窗口后是否有一种win32函数可以更改窗口的样式?我希望更改在CreateWindowEx
中指定的样式标志。具体来说,我想将标准窗口转换为没有边框和调整大小功能的窗口。
我认为SetWindowLongPtr
可以做到这一点。请注意,如果更改了边框样式,则需要调用SetWindowPos
,如备注中所指出的那样。
某些样式只在窗口创建期间生效,因此无法通过此调用设置。MSDN通常会标注可以后续设置的样式。
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
在createwindowex或SetWindowLongPtr中,您应该尝试使用以下窗口样式:WS_POPUPWINDOW|WS_TABSTOP |WS_VISIBLE
我解决这个问题的方法是使用 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;
}
ShowWindow
,而是将 SWP_SHOWWINDOW
传递到 SetWindowPos
。 - metablasterSetWindowLong(hWnd, GWL_STYLE, newStyle); ShowWindow(hWnd, SW_SHOW);
设置窗口长宽比、样式和新样式; 显示窗口,使其可见。