Win32 编辑控件滚动条在 Windows 10 中不起作用

问题描述

我目前正在尝试在 Win32 控件中实现一些滚动条,但在设置 WS_HSCROLL 标志时它们不起作用。

the thing that does not work

从我在其他网站上读到的内容来看,它们“理论上”应该可以工作,因为该类会接收消息并且不会将其推送到父窗口(这也是 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,hInst,0);
    CreateWindow(L"edit",L"placeholder",WS_CHILD | WS_VISIBLE | WS_BORDER
        | WS_HSCROLL | ES_AUTOHSCROLL,10,200,90,hwnd,(HMENU)1,0);

    ShowWindow(hwnd,nCmd);
    MSG msg;
    while (GetMessage(&msg,0) > 0)
    {
        TranslateMessage(&msg);
        dispatchMessage(&msg);
    }
    return 0;
}

我也试过删除 ES_AUTOHSCROLL 因为我读到当设置该样式时滚动条停止工作但没有任何变化(只是你不能再滚动超过控制矩形)

解决方法

解决了!似乎只有在定义了 ES_MULTILINE 时,两个滚动条才起作用。

原始文档没有对此进行任何说明,但似乎确实如此。我通过尝试 this example 解决了这个问题,然后移除了一些东西直到它坏了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...