WTL 给一个对话框添加垂直滚动条
2011-05-08 21:41
267 查看
1.消息映射宏:
2.在OnInitDialog里获取窗口的实际大小,以及初始化滚动条位置:
3.响应消息:
MESSAGE_HANDLER(WM_VSCROLL, OnVscroll) MESSAGE_HANDLER(WM_SIZE, OnSize) MESSAGE_HANDLER(WM_MOUSEWHEEL, OnMouseWheel)
2.在OnInitDialog里获取窗口的实际大小,以及初始化滚动条位置:
::GetWindowRect(m_hWnd, &m_wndRect); ScreenToClient(&m_wndRect); m_nScrollPos = 0;
3.响应消息:
LRESULT OnVscroll(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) { int curPos = HIWORD(wParam); int nDelta = 0; int nScrollStep = (m_nScrollRange) / 9; m_nScrollPos = ::GetScrollPos(m_hWnd, SB_VERT); switch (LOWORD(wParam)) { case SB_LINEDOWN: if (m_nScrollPos >= m_nScrollRange) { return 0; } nDelta = min(nScrollStep, m_nScrollRange - m_nScrollPos); break; case SB_LINEUP: if (m_nScrollPos <= 0) { return 0; } nDelta = -min(nScrollStep, m_nScrollPos); break; case SB_PAGEDOWN: if (m_nScrollPos >= m_nScrollRange) { return 0; } nDelta = min(m_nScrollRange, m_nScrollRange - m_nScrollPos); break; case SB_PAGEUP: if (m_nScrollPos <= 0) { return 0; } nDelta = -min(m_nScrollRange, m_nScrollPos); break; case SB_THUMBPOSITION: case SB_THUMBTRACK: nDelta = curPos - m_nScrollPos; break; default: break; } m_nScrollPos += nDelta; ::SetScrollPos(m_hWnd, SB_VERT, m_nScrollPos, TRUE); ::ScrollWindow(m_hWnd, 0, -nDelta, NULL, m_wndRect); ::UpdateWindow(m_hWnd); return 0; } LRESULT OnSize(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { SCROLLINFO si; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_ALL; si.nMin = 0; si.nMax = m_wndRect.Height(); //窗口的实际高度 si.nPage = HIWORD(lParam); //窗口的显示高度 si.nPos = 0; SetScrollInfo(SB_VERT, &si, TRUE); m_nScrollRange = si.nMax - si.nPage; //滚动范围 return 0; } LRESULT OnMouseWheel(UINT , WPARAM wParam, LPARAM , BOOL& ) { MouseWheelHandle(HIWORD(wParam)); return 0; } void MouseWheelHandle(short nDir) { if (nDir > 0) { ::SendMessage(m_hWnd, WM_VSCROLL, SB_LINEUP, 0); } else if (nDir < 0) { ::SendMessage(m_hWnd, WM_VSCROLL, SB_LINEDOWN, 0); } }
相关文章推荐
- 现有以下代码,要求添加一个水品和垂直的滚动条,请高手指点,非常感谢
- Android:给对话框AlertDialog添加垂直滚动条
- SDC中添加一个对话框到主视图
- 对话框模板中添加一个CCheckList
- MFC基于对话框的程序添加菜单&点击菜单弹出一个新的对话框
- VC对话框实现添加滚动条实现滚动效果
- 在一个工程中添加别的工程的中已创建好的对话框资源
- WTL对话框中添加背景图
- 如何添加一个带有滚动条的文本框
- :创建一个窗体;在窗体上添加一个按钮(text设置为 选择线颜色);向窗体添加一个颜色对话框(colorDialog1)单击按钮,能够打开一个颜色对话框,选择颜色,且更改画笔颜色
- 在一个工程中添加别的工程的中已创建好的对话框资源。(或是。。。)
- 如何将一个工程中的对话框资源添加到另一工程中
- 基于Dialog的应用程序,添加水平与垂直滚动条
- 用Ollydbg给exe文件添加一个对话框初探(图)
- 如何在mfc对话框中添加一个显示网页的窗口
- 在一个工程中添加别的工程的中已创建好的对话框资源
- 。窗体上有一个文本框(多行、且带有垂直滚动条)、一个标签(字体颜色红色、字号16)、一个按钮(该按钮被单击时,实现将文本框中选择文本复制至标签。
- 如何为gridview控件里的“删除”列添加一个确认对话框?
- 在Windows操作系统下使用Visual C++ 6.0编程时,如果点击菜单中的【打开】或者【添加】,或者按快捷键,都会弹出一个对话框,怎么解决?
- 在一个工程中添加别的工程的中已创建好的对话框资源