0

我目前正在尝试在 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因为我读到滚动条在设置该样式时停止工作但没有任何改变(只是你不能再滚动控制矩形)

4

1 回答 1

1

解决它!似乎两个滚动条仅在定义ES_MULTILINE时才起作用。

原始文档没有说明任何内容,但似乎确实如此。我通过尝试这个例子解决了这个问题,然后删除东西直到它坏掉。

于 2021-02-05T22:29:19.677 回答