info.nMax = 100;
info.nPage=0;默认值
maxpos = pScrollBar->GetScrollLimit();
maxpos=101;???
跟踪调试到
int CWnd::GetScrollLimit(int nBar)
{
int nMin, nMax;
GetScrollRange(nBar, &nMin, &nMax);
SCROLLINFO info;
if (GetScrollInfo(nBar, &info, SIF_PAGE))
{
nMax -= __max(info.nPage-1,0);
}
return nMax;
}
其中:nMax -= __max(info.nPage-1,0);返回 101
难道 __max(info.nPage-1,0) 取-1 ???info.nPage>0 时, 如=20
maxpos = pScrollBar->GetScrollLimit();
maxpos 为 81,正确!我试着在自己的程序中加入__max(0-1,0),返回正确的结果:0

解决方案 »

  1.   

    展开或跟进__max(info.nPage-1,0);去看看
      

  2.   

    __max()是一个宏,无法跟进。另外,我前天发的帖子《在对话框picture控件中联一个类,在类中如何存取对话框的成员变量?》
    http://topic.csdn.net/u/20090622/11/5260906d-ff3a-4bc0-988c-fd7dacffb355.html?seed=1961313657
    敬请诸位前辈解答,谢谢了。急!急!急!
      

  3.   

    应该是微软的bug,确切的说是宏定义的bug,所以说使用宏的时候一定要小心
    试试下面的代码,保证maxpos=-1,至于原因就是因为a是一个无符号的数,a-1转化成无符号就是一个很大的数,当然大于0,而maxpos是有符号的,所以赋值的时候转化成有符号的,就是-1info.nPage也是无符号的,所以就出现你说的问题了
    int maxpos=0,minpos=0;
    UINT a=0; maxpos= __max(a-1,0);