对话框滚动条
来源:互联网 发布:logback.xml 打印sql 编辑:程序博客网 时间:2024/05/16 01:55
// 初始化
成员说明:
cbSize: SCROLLINFO结构长度字节数,该值在设置和查询参数时都必须填写。
fMask: 指定结构中的哪些成员是有效,该值共有如下5种选择,可以选择多种用“OR”组合起来,该值在
设置和查询参数时都必须填写。
SIF_ALL :整个结构都有效
SIF_DISABLENOSCROLL:该值仅在设定参数时使用,视控件参数设定的需要来对本结构的成员进行取舍。
SIF_PAGE :nPage成员有效
SIF_POS :nPos成员有效
SIF_RANGE :nMin和nMax成员有效
nMin:滚动范围最小值
nMax:滚动范围最大值
nPage:页尺寸,用来确定比例滚动框的大小
nPos:滚动框的位置
nTrackPos:拖动时滚动框的位置,该参数只能查询,不能设置。
BOOL SD_OnInitDialog(HWND hwnd, HWND /*hwndFocus*/, LPARAM /*lParam*/){ RECT rc = {}; GetClientRect(hwnd, &rc); const SIZE sz = { rc.right - rc.left, rc.bottom - rc.top }; SCROLLINFO si = {}; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE; si.nPos = si.nMin = 1; si.nMax = sz.cx; si.nPage = sz.cx; SetScrollInfo(hwnd, SB_HORZ, &si, FALSE); si.nMax = sz.cy; si.nPage = sz.cy; SetScrollInfo(hwnd, SB_VERT, &si, FALSE); return FALSE;}// handle WM_SIZE
void SD_OnSize(HWND hwnd, UINT state, int cx, int cy){ if(state != SIZE_RESTORED && state != SIZE_MAXIMIZED) return; SCROLLINFO si = {}; si.cbSize = sizeof(SCROLLINFO); const int bar[] = { SB_HORZ, SB_VERT }; const int page[] = { cx, cy }; for(size_t i = 0; i < ARRAYSIZE(bar); ++i) { si.fMask = SIF_PAGE; si.nPage = page[i]; SetScrollInfo(hwnd, bar[i], &si, TRUE); si.fMask = SIF_RANGE | SIF_POS; GetScrollInfo(hwnd, bar[i], &si); const int maxScrollPos = si.nMax - (page[i] - 1); // Scroll client only if scroll bar is visible and window's // content is fully scrolled toward right and/or bottom side. // Also, update window's content on maximize. const bool needToScroll = (si.nPos != si.nMin && si.nPos == maxScrollPos) || (state == SIZE_MAXIMIZED); if(needToScroll) { SD_ScrollClient(hwnd, bar[i], si.nPos); } }}
void SD_OnHScroll(HWND hwnd, HWND /*hwndCtl*/, UINT code, int /*pos*/){ SD_OnHVScroll(hwnd, SB_HORZ, code);}void SD_OnVScroll(HWND hwnd, HWND /*hwndCtl*/, UINT code, int /*pos*/){ SD_OnHVScroll(hwnd, SB_VERT, code);}void SD_OnHVScroll(HWND hwnd, int bar, UINT code){ const int scrollPos = SD_GetScrollPos(hwnd, bar, code); if(scrollPos == -1) return; SetScrollPos(hwnd, bar, scrollPos, TRUE); SD_ScrollClient(hwnd, bar, scrollPos);}void SD_ScrollClient(HWND hwnd, int bar, int pos){ static int s_prevx = 1; static int s_prevy = 1; int cx = 0; int cy = 0; int& delta = (bar == SB_HORZ ? cx : cy); int& prev = (bar == SB_HORZ ? s_prevx : s_prevy); delta = prev - pos; prev = pos; if(cx || cy) { ScrollWindow(hwnd, cx, cy, NULL, NULL); }}int SD_GetScrollPos(HWND hwnd, int bar, UINT code){ SCROLLINFO si = {}; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE | SIF_TRACKPOS; GetScrollInfo(hwnd, bar, &si); const int minPos = si.nMin; const int maxPos = si.nMax - (si.nPage - 1); int result = -1; switch(code) { case SB_LINEUP /*SB_LINELEFT*/: result = max(si.nPos - 1, minPos); break; case SB_LINEDOWN /*SB_LINERIGHT*/: result = min(si.nPos + 1, maxPos); break; case SB_PAGEUP /*SB_PAGELEFT*/: result = max(si.nPos - (int)si.nPage, minPos); break; case SB_PAGEDOWN /*SB_PAGERIGHT*/: result = min(si.nPos + (int)si.nPage, maxPos); break; case SB_THUMBPOSITION: // do nothing break; case SB_THUMBTRACK: result = si.nTrackPos; break; case SB_TOP /*SB_LEFT*/: result = minPos; break; case SB_BOTTOM /*SB_RIGHT*/: result = maxPos; break; case SB_ENDSCROLL: // do nothing break; } return result;}
成员说明:
cbSize: SCROLLINFO结构长度字节数,该值在设置和查询参数时都必须填写。
fMask: 指定结构中的哪些成员是有效,该值共有如下5种选择,可以选择多种用“OR”组合起来,该值在
设置和查询参数时都必须填写。
SIF_ALL :整个结构都有效
SIF_DISABLENOSCROLL:该值仅在设定参数时使用,视控件参数设定的需要来对本结构的成员进行取舍。
SIF_PAGE :nPage成员有效
SIF_POS :nPos成员有效
SIF_RANGE :nMin和nMax成员有效
nMin:滚动范围最小值
nMax:滚动范围最大值
nPage:页尺寸,用来确定比例滚动框的大小
nPos:滚动框的位置
nTrackPos:拖动时滚动框的位置,该参数只能查询,不能设置。
- 关于对话框滚动条,
- 关于对话框滚动条
- 对话框滚动条
- Windows对话框和滚动条
- VC 对话框添加滚动条
- 对话框滚动条 (推荐)
- MFC,对话框滚动条使用
- MFC对话框处理滚动条
- PocketPC中对话框的滚动条问题
- 对话框中滚动条方便用
- 对话框实现水平垂直滚动条
- 带滚动条的对话框类
- 对话框中滚动条方便用
- 对话框中滚动条方便用
- vc 实现垂直滚动条对话框
- MFC---之对话框滚动条的使用
- 对话框中滚动条方便用
- 对话框自带滚动条的使用
- SFML学习纪要
- Hibernate环境搭建
- The MySQL C API编程实例
- AE intersect、clip的实现
- android HAL框架
- 对话框滚动条
- Android Sliding View
- HTTP之Digest authentication
- ROS中nav_msgs消息类型
- GDB远程调试技术(应用层调试)
- JS时间,中英文2个版本
- 本文禁止评论
- css3 实现图片遮罩效果,hover出现文字
- AfxBeginThread()用法(转载)