c++ - Win32 编辑控件滚动条在 Windows 10 中不起作用
问题描述
我目前正在尝试在 Win32 控件中实现一些滚动条,但它们在设置WS_HSCROLL标志时不起作用。
从我在其他网站上读到的内容来看,它们应该“理论上”工作,因为该类接收消息并且不会将其推送到父窗口(这也是 Rich 控件的工作方式)。
要添加水平滚动条,请使用样式 WS_HSCROLL;要添加垂直滚动条,请使用样式 WS_VSCROLL。带有滚动条的编辑控件处理它自己的滚动条消息。 资源
但是由于某种原因,滚动的东西不会移动,如果您尝试手动移动它,它只会将正方形返回到起点而不做任何移动。
这是一个示例代码:
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时才起作用。
原始文档没有说明任何内容,但似乎确实如此。我通过尝试这个例子解决了这个问题,然后删除东西直到它坏掉。
推荐阅读
- java - 如何在 Spring Boot 中记录对未知 URL 端点的请求?
- tensorflow - Dataset.map 可以以某种方式并行化 tf.py_func 调用吗?
- dictionary - 添加大于 n 过滤器的对
- sql - 如何从 SQL 查询中仅选择第二个结果
- java - 比较器:将 2 个对象与可以为空的字段进行比较
- python - 如何在分布式 Tensorflow 中并行化 python 输入管道
- javascript - Angular 1.6 - 使用状态从错误的 url 重定向到 404 页面
- python - 如何将 tkinter 的 Text 小部件的文本发送或打印到打印机?
- reactjs - 无法呈现已排序的数据-ReactJSr
- python - 尝试运行一个进程 1 秒然后中止该进程并在 python 中启动一个新进程