WM_VSCROLL和WM_HSCROLL 消息的使用

(1)当用户单击滚动条或者是拖动滑块时,Windows会向窗口过程发送WM_VSCROLL消息(垂直滚动时)或者是WM_HSCROLL消息(水平滚动时)。在滚动条上的任何鼠标动作会产生两条消息:一条是在鼠标键按下时,另一条是在鼠标键松开时。

(2)和其他的消息一样,WM_VSCROLL和WM_HSCROLL消息也都伴随着wParam和lParam消息参数。当滚动条是窗口的一部分时可以忽略lParam参数(该参数只用于滚动条是子窗口时,通常是在对话框中)。

(3)wParam参数被分为低位字和高位字。低位字代表了鼠标在滚动条上的动作。这个值被称为“通知码”,是有一个以SB开头的标识符(SB代表滚动条)定义。定义如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要给窗口添加滚动条,可以通过以下步骤实现: 1. 在创建窗口时,将窗口样式中的 WS_VSCROLL 和/或 WS_HSCROLL 标志设置为需要滚动的方向。例如: ```c++ CreateWindowEx(0, L"MyWindowClass", L"My Window", WS_OVERLAPPEDWINDOW | WS_VSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL, NULL, hInstance, NULL); ``` 2. 在窗口过程中,处理 WM_VSCROLL 和/或 WM_HSCROLL 消息,根据滚动条的当前位置来更新窗口内容的显示。例如: ```c++ case WM_VSCROLL: { int nPos = GetScrollPos(hwnd, SB_VERT); switch (LOWORD(wParam)) { case SB_TOP: nPos = 0; break; case SB_BOTTOM: nPos = 100; break; case SB_LINEUP: nPos--; break; case SB_LINEDOWN: nPos++; break; case SB_PAGEUP: nPos -= 10; break; case SB_PAGEDOWN: nPos += 10; break; case SB_THUMBTRACK: nPos = HIWORD(wParam); break; } nPos = max(0, min(nPos, 100)); SetScrollPos(hwnd, SB_VERT, nPos, TRUE); UpdateWindow(hwnd); break; } ``` 其中,GetScrollPos 函数可以获取滚动条的当前位置,SetScrollPos 函数可以设置滚动条的位置。在以上示例中,滚动条的位置被限制在 0 到 100 之间。 3. 在需要更新窗口内容的时候,调用 InvalidateRect 函数来触发窗口进行重绘,以便显示更新后的内容。例如: ```c++ InvalidateRect(hwnd, NULL, TRUE); ``` 以上是添加垂直滚动条的示例,添加水平滚动条的方法类似,只需要将窗口样式中的 WS_HSCROLL 标志设置为需要滚动的方向,处理 WM_HSCROLL 消息,并使用 SetScrollPos 函数来设置水平滚动条的位置即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值