win32编程,滚动条不显示

半仙 雷 20 信誉分
2026-01-06T11:58:30.84+00:00

edit contrl控件子类化用来绘制16进制编辑器,控件属性vscroll已设置,scrollInfo 已设置且在运行中检查数值正确,但是滚动条却不显示,也接收不到wm_vscroll 消息,不知道哪里出了问题

Windows 开发 | Windows API - Win32
0 个注释 无注释

问题作者接受的答案
匿名
2026-01-07T06:47:37.66+00:00

你好 @半仙 雷

你手动调用的 SetScrollInfo() 很可能被编辑控件的内部滚动条管理覆盖了。

与其子类化 EDIT 控件,不如创建你自己的窗口类以获得完全控制,例如这样:

// 注册一个自定义的十六进制编辑器窗口类
WNDCLASSEXW wcex = { 0 };
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = HexEditProc;  // 你自己的 WndProc
wcex.hInstance = hInst;
wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wcex.lpszClassName = L"HexEditorClass";
RegisterClassExW(&wcex);

// 使用 WS_VSCROLL 创建
hHexEdit = CreateWindowExW(
    0, L"HexEditorClass", L"",
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_BORDER,
    10, 10, 760, 500,
    hWnd, (HMENU)1001, hInst, NULL
);

或者,你也可以移除手动的滚动条管理,让 EDIT 控件自己内部处理。

你可以参考这个小示例:

用户的图像

希望这能帮到你。

此答案是否有帮助?

0 个注释 无注释

0 个其他答案

排序依据: 最新

你的答案

提问者可以将答案标记为“已接受”,审查方可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。