为什么 windows api 滚动条没有响应?

Why does the windows api scrollbars not respond?

我正在尝试在 window 中创建一个可滚动的 child-window。 child-window 应该有 scrollbars;滚动条出现但完全没有反应。 Window 创建代码:

// "mainwindow" is the handle of the main application window.
HWND wnd = CreateWindow(WC_STATIC, NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL,
    10, 100, 300, 300, mainwindow, NULL, GetModuleHandle(0), 0);

SCROLLINFO si = { 0 };
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_ALL;
si.nMax = 800;

SetScrollInfo(g_wnd, SB_VERT, &si, true);

我已经为新的 child-window 设置了自定义 WNDPROC,但是没有 scrolling-messages 到达。我在 Internet 上找到了很多示例,但其中 none 要么有效,要么是关于在 child-window 中使用 scrollbars

正如 Hans Passant 指出的那样,可滚动的 child-window 需要它自己的 windows class。

示例代码:

HWND create_scroll_window(HWND parent)
{
    WNDCLASSEX wcex = { 0 };

    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = WndProc;
    wcex.hInstance = GetModuleHandle(0);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wcex.lpszClassName = TEXT("MyScrollWinClass");

    if (!RegisterClassEx(&wcex)) return 0;

    HWND hWnd = CreateWindow(_T("MyScrollWinClass"), _T(""), WS_CHILD | WS_BORDER | WS_VISIBLE | WS_VSCROLL, 20, 20,
    300, 300, parent, NULL, wcex.hInstance, NULL);

    return hWnd;
}