【发布时间】:2010-02-18 02:14:09
【问题描述】:
是否有一个 win32 函数可以在创建窗口后更改其样式?我想更改CreateWindowEx 中指定的样式标志。具体来说,我想将标准窗口转换为没有边框且不调整大小的窗口。
【问题讨论】:
标签: winapi
是否有一个 win32 函数可以在创建窗口后更改其样式?我想更改CreateWindowEx 中指定的样式标志。具体来说,我想将标准窗口转换为没有边框且不调整大小的窗口。
【问题讨论】:
标签: winapi
我认为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。
SetWindowLong(hWnd, GWL_STYLE, newStyle); ShowWindow(hWnd, SW_SHOW);
【讨论】: