Win32 编辑控件滚动条在 Windows 10 中不起作用
Posted
技术标签:
【中文标题】Win32 编辑控件滚动条在 Windows 10 中不起作用【英文标题】:Win32 Edit control scrollbars not working in Windows 10 【发布时间】:2021-02-05 22:11:03 【问题描述】:我目前正在尝试在 Win32 控件中实现一些滚动条,但它们在设置 WS_HSCROLL 标志时不起作用。
根据我在其他网站上阅读的内容,它们“理论上”应该可以工作,因为该类接收消息并且不会将其推送到父窗口(这也是 Rich 控件的工作方式)。
要添加水平滚动条,请使用样式 WS_HSCROLL;要添加垂直滚动条,请使用样式 WS_VSCROLL。带有滚动条的编辑控件处理它自己的滚动条消息。 Source
但由于某种原因,滚动条并没有移动,如果您尝试手动移动它,它只会将方块返回到开始位置而不做任何移动。
这是一个示例代码:
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,因为我读到当设置该样式时滚动条停止工作但没有任何变化(只是您不能再滚动超出控制矩形)
【问题讨论】:
【参考方案1】:修好了!似乎两个滚动条仅在定义 ES_MULTILINE 时才起作用。
原始文档没有说明任何内容,但情况似乎如此。我通过尝试this example 解决了这个问题,然后删除了一些东西直到它坏了。
【讨论】:
滚动确实在单行左对齐ES_AUTOHSCROLL
编辑控件中也起作用,如the docs中所述。
是的,但是滚动条在应用时是一个虚拟的。这就是我想要的以上是关于Win32 编辑控件滚动条在 Windows 10 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
请问:C# listView控件如何判断滚动条的位置?判断滚动条在控件的最下面?
Creating Dialogbased Win32 Application / 创建基于对话框的Win32应用程序Edit Control的应用Unicode转ANSI自动滚动 /