Win32 编辑控件滚动条在 Windows 10 中不起作用
Win32 Edit control scrollbars not working in Windows 10
我目前正在尝试在 Win32 控件中实现一些滚动条,但它们在设置 WS_HSCROLL 标志时不起作用。
从我在其他网站上读到的内容来看,它们应该“理论上”起作用,因为 class 接收消息并且不会将其推送给父 window(这也是丰富的控件工作)。
To add a horizontal scroll bar, use the style WS_HSCROLL; to add a vertical scroll bar, use the style WS_VSCROLL. An edit control with scroll bars processes its own scroll bar messages.
Source
但由于某种原因,滚动条不会移动,如果您尝试手动移动它,它只会 returns 正方形到开头,而不会做任何移动。
这是一个示例代码:
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR pStr, int nCmd)
{
WNDCLASS wcx = { 0 };
wcx.lpfnWndProc = DefWindowProc;
wcx.hInstance = hInst;
wcx.hCursor = LoadCursor(0, IDC_ARROW);
wcx.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1);
wcx.lpszClassName = L"SIMPLEWND";
RegisterClass(&wcx);
int desktopwidth = GetSystemMetrics(SM_CXSCREEN);
int desktopheight = GetSystemMetrics(SM_CYSCREEN);
HWND hwnd = CreateWindowEx(0, L"SIMPLEWND", L"Main Window", WS_OVERLAPPEDWINDOW,
desktopwidth / 4, desktopheight / 4, desktopwidth / 2, desktopheight / 2, 0, 0, hInst, 0);
CreateWindow(L"edit", L"placeholder", WS_CHILD | WS_VISIBLE | WS_BORDER
| WS_HSCROLL | ES_AUTOHSCROLL, 10, 10, 200, 90, hwnd, (HMENU)1, hInst, 0);
ShowWindow(hwnd, nCmd);
MSG msg;
while (GetMessage(&msg, 0, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
我也试过删除 ES_AUTOHSCROLL 因为我读到滚动条在设置该样式时停止工作但没有任何变化(只是你不能再滚动经过控制矩形)
已修复!似乎两个滚动条仅在定义 ES_MULTILINE 时才起作用。
原始文档对此没有任何说明,但似乎是这样。我通过尝试 this example 然后删除东西直到它坏了来解决它。
我目前正在尝试在 Win32 控件中实现一些滚动条,但它们在设置 WS_HSCROLL 标志时不起作用。
从我在其他网站上读到的内容来看,它们应该“理论上”起作用,因为 class 接收消息并且不会将其推送给父 window(这也是丰富的控件工作)。
To add a horizontal scroll bar, use the style WS_HSCROLL; to add a vertical scroll bar, use the style WS_VSCROLL. An edit control with scroll bars processes its own scroll bar messages. Source
但由于某种原因,滚动条不会移动,如果您尝试手动移动它,它只会 returns 正方形到开头,而不会做任何移动。
这是一个示例代码:
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR pStr, int nCmd)
{
WNDCLASS wcx = { 0 };
wcx.lpfnWndProc = DefWindowProc;
wcx.hInstance = hInst;
wcx.hCursor = LoadCursor(0, IDC_ARROW);
wcx.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1);
wcx.lpszClassName = L"SIMPLEWND";
RegisterClass(&wcx);
int desktopwidth = GetSystemMetrics(SM_CXSCREEN);
int desktopheight = GetSystemMetrics(SM_CYSCREEN);
HWND hwnd = CreateWindowEx(0, L"SIMPLEWND", L"Main Window", WS_OVERLAPPEDWINDOW,
desktopwidth / 4, desktopheight / 4, desktopwidth / 2, desktopheight / 2, 0, 0, hInst, 0);
CreateWindow(L"edit", L"placeholder", WS_CHILD | WS_VISIBLE | WS_BORDER
| WS_HSCROLL | ES_AUTOHSCROLL, 10, 10, 200, 90, hwnd, (HMENU)1, hInst, 0);
ShowWindow(hwnd, nCmd);
MSG msg;
while (GetMessage(&msg, 0, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
我也试过删除 ES_AUTOHSCROLL 因为我读到滚动条在设置该样式时停止工作但没有任何变化(只是你不能再滚动经过控制矩形)
已修复!似乎两个滚动条仅在定义 ES_MULTILINE 时才起作用。
原始文档对此没有任何说明,但似乎是这样。我通过尝试 this example 然后删除东西直到它坏了来解决它。