为什么 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;
}
我正在尝试在 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;
}