GetScrollInfo获取ListView的当前滚动条位置为什么是0
时间: 2024-05-23 11:14:00 浏览: 15
可能是因为你没有正确地初始化 `SCROLLINFO` 结构体中的成员变量。在调用 `GetScrollInfo` 前,需要先按照以下步骤初始化 `SCROLLINFO`:
1. 将 `cbSize` 成员设置为 `sizeof(SCROLLINFO)`。
2. 将 `fMask` 成员设置为 `SIF_ALL`。
3. 将 `nMin` 和 `nMax` 成员设置为控件的最小值和最大值。
4. 将 `nPage` 成员设置为控件的页面大小。
5. 最后调用 `GetScrollInfo` 函数。
如果你初始化 `SCROLLINFO` 时漏掉了其中的任何一步,都有可能导致 `GetScrollInfo` 返回的滚动条位置为 0。
相关问题
vc改变clistctrl控件中滚动条的颜色
要改变CListCtrl控件中滚动条的颜色,可以通过以下步骤来实现:
1. 首先,获取CListCtrl控件的滚动条句柄。可以使用GetScrollInfo函数来获取控件的滚动条信息。
2. 接着,使用GetScrollBarCtrl函数获取滚动条的CScrollBar对象。这个对象可以用于设置滚动条的属性。
3. 然后,可以通过调用CScrollBar对象的SetScrollColors函数来设置滚动条的颜色。该函数接受三个参数,分别是滚动条的背景颜色、滚动条滑块的颜色以及滚动条的箭头颜色。
4. 最后,刷新CListCtrl控件。可以使用函数InvalidateRect或者RedrawWindow来强制重绘控件,以显示新的滚动条颜色。
需要注意的是,以上步骤中的一些函数只能在MFC框架中使用,如果是其他环境或者使用其他UI库,可能会有不同的方法来改变滚动条颜色。
利用基本的C语言库函数基于WindowsAPI写个类似于MessageBox的函数,但是弹出来的窗口带有垂直滚动条
好的,我可以帮你写一个类似于MessageBox的函数,但是带有垂直滚动条。这需要用到Windows API的一些功能,比如创建一个对话框和在对话框中添加一个滚动条等。以下是一个示例代码:
```c
#include <windows.h>
int ScrollMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
// 创建对话框
int nResult = MessageBox(hWnd, lpText, lpCaption, uType | MB_SETFOREGROUND);
if (nResult == IDOK || nResult == IDCANCEL || nResult == IDABORT || nResult == IDRETRY || nResult == IDIGNORE || nResult == IDYES || nResult == IDNO)
{
// 返回按钮结果
return nResult;
}
else
{
// 创建带有滚动条的对话框
HWND hDlg = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_SCROLL), hWnd, NULL);
// 显示消息文本
HWND hText = GetDlgItem(hDlg, IDC_TEXT);
SetWindowText(hText, lpText);
// 计算文本框高度
RECT rcText;
GetClientRect(hText, &rcText);
int nTextHeight = rcText.bottom - rcText.top;
// 创建滚动条
HWND hScroll = CreateWindowEx(0, "SCROLLBAR", NULL, WS_CHILD | WS_VISIBLE | SBS_VERT, rcText.right, rcText.top, GetSystemMetrics(SM_CXVSCROLL), nTextHeight, hDlg, NULL, GetModuleHandle(NULL), NULL);
// 设置滚动范围和页面大小
SCROLLINFO si;
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
si.nMin = 0;
si.nMax = nTextHeight;
si.nPage = rcText.bottom - rcText.top;
SetScrollInfo(hScroll, SB_CTL, &si, TRUE);
// 处理对话框消息,直到用户点击按钮
while (true)
{
MSG msg;
if (GetMessage(&msg, NULL, 0, 0))
{
if (!IsDialogMessage(hDlg, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
// 窗口关闭时返回IDCANCEL
return IDCANCEL;
}
// 获取滚动条信息
SCROLLINFO si;
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
GetScrollInfo(hScroll, SB_CTL, &si);
// 处理滚动条消息
switch (msg.message)
{
case WM_VSCROLL:
switch (LOWORD(msg.wParam))
{
case SB_TOP:
si.nPos = si.nMin;
break;
case SB_BOTTOM:
si.nPos = si.nMax;
break;
case SB_LINEUP:
si.nPos--;
break;
case SB_LINEDOWN:
si.nPos++;
break;
case SB_PAGEUP:
si.nPos -= si.nPage;
break;
case SB_PAGEDOWN:
si.nPos += si.nPage;
break;
case SB_THUMBTRACK:
si.nPos = HIWORD(msg.wParam);
break;
default:
break;
}
// 更新滚动条位置
si.fMask = SIF_POS;
SetScrollInfo(hScroll, SB_CTL, &si, TRUE);
// 更新文本框位置
int nScrollPos = GetScrollPos(hScroll, SB_CTL);
SetWindowPos(hText, NULL, 0, -nScrollPos, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
break;
default:
break;
}
}
}
}
```
上面的代码中,我们通过创建一个对话框并在其中添加一个滚动条来实现带有垂直滚动条的MessageBox。在创建滚动条之后,我们还需要处理对话框消息,直到用户点击了一个按钮。在处理对话框消息的过程中,我们还需要处理滚动条消息,以便根据滚动条位置更新文本框的位置。
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![apk](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)