void CRDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
  请问这里的pScrooBar是要我传进去还是返回给我用的我认为是返回给我用的
   但我这样用pScrollBar->SetScrollRange(0,100);一执行程序用鼠标在滚动条一移
   动就会出现“程序非法操作”等字样我一检查pScrollBar它原来是空的这是怎么回事
   请高手指教?(滚动条我是在对话框的属性中选择了Vertical scroll后它自动出现
   不是加的滚动条)
    if (pScrollBar==NULL) MessageBox("a");
GetDlg
int temp=0;
TRACE("%d",temp);
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

解决方案 »

  1.   

    pScrollBar是传出给你用的,不必传入。
    pScrollBar必须等于你操作的Scroll,应该判断一下;pScrollBar->m_hWnd== ((CWnd *)GetDlgItem(IDC_))->m_hWnd
      

  2.   

    to wuchuncai:
    注意://
    滚动条我是在对话框的属性中选择了Vertical scroll后它自动出现
    不是加的滚动条pScrollBar->m_hWnd== ((CWnd *)GetDlgItem(IDC_))->m_hWnd
    你这样一用照样出现“非法操作”,因为在这里pScrollBar是NULL,怎么还能用
    呢? 
      

  3.   

    if (pScrollBar->GetDlgCtrlID() == IDC_SCROLLBAR1)
    {
        // To Do ...Your Scrollbar1
    }if (pScrollBar->GetDlgCtrlID() == IDC_SCROLLBAR2)
    {
        // To Do ...Your Scrollbar2
    }OR Your can use switch statement
      

  4.   

    pScrollBar是NULL,就是指dlg的对于这样的问题直接用一下函数,
    this->SetScrollRange( int nBar, int nMinPos, int nMaxPos, BOOL bRedraw = TRUE );
      

  5.   

    直接用CWnd 的操作ScrollBar 的函数SetScrollPos,
    SetScrollRange,等函数
      

  6.   

    to wuchuncai:
     你说pScroll是返回给我用的,哪它返回一个NULL给我有什么用?
     pScrollBar是NULL,就是指dlg的,
    它明明是CScrollBar的指针,
     请问指dlg的什么东东,请回答清楚.
    它返回一个NULL给我有什么用还不如不返回肯定不是你所讲的意思。to promaster:
     我说了在对话框中我没有加滚动条控件,哪里还有IDC_SCROLLBAR1等等;我的意思是利用它返回给我的pScrollBar这个指针来操作对话框自动出现的滚
    动条,为何它是NULL?它在这里究竟是指什么?希望继续指教
      

  7.   

    我是说有的话,你就这样处理,没有的话就不处理。如是有控件的话,就把GetDlgCtrlID()传给pScrollBar,以操作控件。
      

  8.   

    应该这样看:void CRDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  如果 pScrollBar是NULL,那么说明是Dlg自身的,如果要处理一定要用this,
    也可以直接调用CWnd的SCroll的函数, 如果 pScrollBar不是NULL,一定是Dlg其他Ctr的,就必须判断是哪一个的,
    再作相应的处理