MFC中,如何在对话框下,画一个带滚动条的矩形框
MFC中,怎么在对话框上,画一个带滚动条的矩形框?
假设,CRect rect(0,0,500,2000);
将rect画在对话框上,并添加一个垂直滚动条?因为rect太长,不能全部在对话框上显示?
求高手指点
------解决方案--------------------
.....
把dialog设置为滚动的,加上滚动处理事件。
dialog->attribute->styles->hScroll, vScroll checked.
add message function OnHScroll, OnVScroll
假设,CRect rect(0,0,500,2000);
将rect画在对话框上,并添加一个垂直滚动条?因为rect太长,不能全部在对话框上显示?
求高手指点
------解决方案--------------------
.....
把dialog设置为滚动的,加上滚动处理事件。
dialog->attribute->styles->hScroll, vScroll checked.
add message function OnHScroll, OnVScroll
- C/C++ code
void xxxx::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { SCROLLINFO scrollinfo; GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); switch (nSBCode) { case SB_BOTTOM://滑块滚动到最底部 ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax)*10); scrollinfo.nPos = scrollinfo.nMax; SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); break; case SB_TOP://滑块滚动到最顶部 ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin)*10); scrollinfo.nPos = scrollinfo.nMin; SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); break; case SB_LINEUP://单击上箭头 scrollinfo.nPos -= 1; if (scrollinfo.nPos){ scrollinfo.nPos = scrollinfo.nMin; break; } SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); ScrollWindow(0,10); break; case SB_LINEDOWN://单击下箭头 scrollinfo.nPos += 1; if (scrollinfo.nPos>scrollinfo.nMax) { scrollinfo.nPos = scrollinfo.nMax; break; } SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); ScrollWindow(0,-10); break; case SB_PAGEUP://单击滑块上方空白区域 scrollinfo.nPos -= 5; if (scrollinfo.nPos) { scrollinfo.nPos = scrollinfo.nMin; break; } SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); ScrollWindow(0,10*5); break; case SB_PAGEDOWN://单击滑块下方空白区域 scrollinfo.nPos += 5; if (scrollinfo.nPos>scrollinfo.nMax) { scrollinfo.nPos = scrollinfo.nMax; break; } SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); ScrollWindow(0,-10*5); break; case SB_ENDSCROLL://鼠标离开滑块,结束滑块拖动 //MessageBox("SB_ENDSCROLL"); break; case SB_THUMBPOSITION: break; case SB_THUMBTRACK://拖动滑块 ScrollWindow(0,(scrollinfo.nPos-nPos)*10); scrollinfo.nPos = nPos; SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); break; } CDialog::OnVScroll(nSBCode, nPos, pScrollBar); } void xxxx::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { SCROLLINFO scrollinfo; GetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL); switch (nSBCode) { case SB_LEFT: ScrollWindow((scrollinfo.nPos-scrollinfo.nMin)*10,0); scrollinfo.nPos = scrollinfo.nMin; SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL); break; case SB_RIGHT: ScrollWindow((scrollinfo.nPos-scrollinfo.nMax)*10,0); scrollinfo.nPos = scrollinfo.nMax; SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL); break; case SB_LINELEFT: scrollinfo.nPos -= 1; if (scrollinfo.nPos) { scrollinfo.nPos = scrollinfo.nMin; break; } SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL); ScrollWindow(10,0); break; case SB_LINERIGHT: scrollinfo.nPos += 1; if (scrollinfo.nPos>scrollinfo.nMax) { scrollinfo.nPos = scrollinfo.nMax; break; } SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL); ScrollWindow(-10,0); break; case SB_PAGELEFT: scrollinfo.nPos -= 5; if (scrollinfo.nPos) { scrollinfo.nPos = scrollinfo.nMin; break; } SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL); ScrollWindow(10*5,0); break; case SB_PAGERIGHT: scrollinfo.nPos += 5; if (scrollinfo.nPos>scrollinfo.nMax) { scrollinfo.nPos = scrollinfo.nMax; break; } SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL); ScrollWindow(-10*5,0); break; case SB_THUMBPOSITION: break; case SB_THUMBTRACK: ScrollWindow((scrollinfo.nPos-nPos)*10,0); scrollinfo.nPos = nPos; SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL); break; case SB_ENDSCROLL: break; } CDialog::OnHScroll(nSBCode, nPos, pScrollBar); }