创建的非模式对话框,能不能怎样添加滚动条 如题,我在一个基于对话框的项目中又添加了一个非模式对话框,我在VS2008下,在属性的HorizontalScrollbar项改为TRUE,然后添加处理程序,但是好像有问题,请教高手,怎样添加一个滚动条,有示例更好,谢谢[email protected]这是我邮箱 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对话框上的滚动条是需要自己添加上去的,直接用鼠标拖放上去滚动条,或者在对话框的头文件里定义CScrollBar的成员变量,在对话框的OnInitilize()中创建滚动条,再在OnSize()在调整滚动条的位置。并在对话框中添加WM_HSCROLL和WM_VSCROLL消息,在这两个消息函数里处理滚动条的滚动处理代码。 BOOL CTestDlgDlg::OnInitDialog() { SetScrollRange(SB_HORZ, 0, 100); SetScrollRange(SB_VERT, 0, 100); } void CTestDlgDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { int nCurPos; int nPrevPos; CRect rect; GetClientRect(&rect); nPrevPos = GetScrollPos(SB_HORZ); nCurPos = nPrevPos; switch(nSBCode) { case SB_LEFT: SetScrollPos(SB_HORZ, 0); ScrollWindow(0, 0); break; case SB_RIGHT: SetScrollPos(SB_HORZ, 100); ScrollWindow(-rect.Width(), 0); break; case SB_PAGELEFT: nCurPos = nPrevPos - 10; if(nCurPos < 0) nCurPos = 0; SetScrollPos(SB_HORZ, nCurPos); break; case SB_PAGERIGHT: nCurPos = nPrevPos + 10; if(nCurPos > 100) nCurPos = 100; SetScrollPos(SB_HORZ, nCurPos); break; case SB_THUMBPOSITION: SetScrollPos(SB_HORZ, nPos); break; case SB_THUMBTRACK: break; case SB_LINELEFT: nCurPos = nPrevPos - 2; if(nCurPos < 0) nCurPos = 0; SetScrollPos(SB_HORZ, nCurPos); break; case SB_LINERIGHT: nCurPos = nPrevPos + 2; if(nCurPos > 100) nCurPos = 100; SetScrollPos(SB_HORZ, nCurPos); break; case SB_ENDSCROLL: break; } nCurPos = GetScrollPos(SB_HORZ); ScrollWindow(rect.Width() * (nPrevPos - nCurPos) / 100, 0); CDialog::OnHScroll(nSBCode, nPos, pScrollBar); } void CTestDlgDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { int nCurPos; int nPrevPos; CRect rect; GetClientRect(&rect); nPrevPos = GetScrollPos(SB_VERT); nCurPos = nPrevPos; switch(nSBCode) { case SB_LEFT: SetScrollPos(SB_VERT, 0); ScrollWindow(0, 0); break; case SB_RIGHT: SetScrollPos(SB_VERT, 100); ScrollWindow(-rect.Height(), 0); break; case SB_PAGELEFT: nCurPos = nPrevPos - 10; if(nCurPos < 0) nCurPos = 0; SetScrollPos(SB_VERT, nCurPos); break; case SB_PAGERIGHT: nCurPos = nPrevPos + 10; if(nCurPos > 100) nCurPos = 100; SetScrollPos(SB_VERT, nCurPos); break; case SB_THUMBPOSITION: SetScrollPos(SB_VERT, nPos); break; case SB_THUMBTRACK: break; case SB_LINELEFT: nCurPos = nPrevPos - 2; if(nCurPos < 0) nCurPos = 0; SetScrollPos(SB_VERT, nCurPos); break; case SB_LINERIGHT: nCurPos = nPrevPos + 2; if(nCurPos > 100) nCurPos = 100; SetScrollPos(SB_VERT, nCurPos); break; case SB_ENDSCROLL: break; } nCurPos = GetScrollPos(SB_VERT); ScrollWindow(0, rect.Height() * (nPrevPos - nCurPos) / 100); CDialog::OnVScroll(nSBCode, nPos, pScrollBar); } 已经解决,在对话框的属性中有水平/垂直 滚动条选项,选True就行,只是我用添加的处理方法void CShowBitmap::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)中的 pScrollBar时除问题了,因为我想先获取当前滑块位置pScrollBar->GetScrollPos();就这里除问题了,现在解决了,还是十分感谢 VS2008在窗口设计器中如何调整窗口尺寸 INI文件中的注释符(;),有什么用? CTipControl的显示问题 如何将静态文本控件的背景设置成透明的 关于字符串变化的一个问题,求解答 如何截获ALT+F4组合键? 谁对opencv里面的delaunay三角剖分方法比较熟悉的? 怎么将一个应用程序里的资源提取出来,并保存为另外的文件? 关于递归的问题,百分相送 急问:VC里怎样用capicom.dll读取*.pfx文件和*.cer文件 指针问题,请高手回答 线程通信问题
直接用鼠标拖放上去滚动条,或者在对话框的头文件里定义CScrollBar的成员变量,在对话框的OnInitilize()中创建滚动条,再在OnSize()在调整滚动条的位置。并在对话框中添加WM_HSCROLL和WM_VSCROLL消息,在这两个消息函数里处理滚动条的滚动处理代码。
{
SetScrollRange(SB_HORZ, 0, 100);
SetScrollRange(SB_VERT, 0, 100);
}
void CTestDlgDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int nCurPos;
int nPrevPos;
CRect rect;
GetClientRect(&rect);
nPrevPos = GetScrollPos(SB_HORZ);
nCurPos = nPrevPos;
switch(nSBCode)
{
case SB_LEFT:
SetScrollPos(SB_HORZ, 0);
ScrollWindow(0, 0);
break;
case SB_RIGHT:
SetScrollPos(SB_HORZ, 100);
ScrollWindow(-rect.Width(), 0);
break;
case SB_PAGELEFT:
nCurPos = nPrevPos - 10;
if(nCurPos < 0)
nCurPos = 0;
SetScrollPos(SB_HORZ, nCurPos);
break;
case SB_PAGERIGHT:
nCurPos = nPrevPos + 10;
if(nCurPos > 100)
nCurPos = 100;
SetScrollPos(SB_HORZ, nCurPos);
break;
case SB_THUMBPOSITION:
SetScrollPos(SB_HORZ, nPos);
break;
case SB_THUMBTRACK:
break;
case SB_LINELEFT:
nCurPos = nPrevPos - 2;
if(nCurPos < 0)
nCurPos = 0;
SetScrollPos(SB_HORZ, nCurPos);
break;
case SB_LINERIGHT:
nCurPos = nPrevPos + 2;
if(nCurPos > 100)
nCurPos = 100;
SetScrollPos(SB_HORZ, nCurPos);
break;
case SB_ENDSCROLL:
break;
}
nCurPos = GetScrollPos(SB_HORZ);
ScrollWindow(rect.Width() * (nPrevPos - nCurPos) / 100, 0);
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CTestDlgDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int nCurPos;
int nPrevPos;
CRect rect;
GetClientRect(&rect);
nPrevPos = GetScrollPos(SB_VERT);
nCurPos = nPrevPos;
switch(nSBCode)
{
case SB_LEFT:
SetScrollPos(SB_VERT, 0);
ScrollWindow(0, 0);
break;
case SB_RIGHT:
SetScrollPos(SB_VERT, 100);
ScrollWindow(-rect.Height(), 0);
break;
case SB_PAGELEFT:
nCurPos = nPrevPos - 10;
if(nCurPos < 0)
nCurPos = 0;
SetScrollPos(SB_VERT, nCurPos);
break;
case SB_PAGERIGHT:
nCurPos = nPrevPos + 10;
if(nCurPos > 100)
nCurPos = 100;
SetScrollPos(SB_VERT, nCurPos);
break;
case SB_THUMBPOSITION:
SetScrollPos(SB_VERT, nPos);
break;
case SB_THUMBTRACK:
break;
case SB_LINELEFT:
nCurPos = nPrevPos - 2;
if(nCurPos < 0)
nCurPos = 0;
SetScrollPos(SB_VERT, nCurPos);
break;
case SB_LINERIGHT:
nCurPos = nPrevPos + 2;
if(nCurPos > 100)
nCurPos = 100;
SetScrollPos(SB_VERT, nCurPos);
break;
case SB_ENDSCROLL:
break;
}
nCurPos = GetScrollPos(SB_VERT);
ScrollWindow(0, rect.Height() * (nPrevPos - nCurPos) / 100);
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
} 已经解决,在对话框的属性中有水平/垂直 滚动条选项,选True就行,只是我用添加的处理方法
void CShowBitmap::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
中的 pScrollBar时除问题了,因为我想先获取当前滑块位置
pScrollBar->GetScrollPos();
就这里除问题了,现在解决了,
还是十分感谢