我现在做了一个CListCtrl控件,里面有一个水平滚动条和一个垂直滚动条,这两个滚动条的功能都是完好的,现在有个问题:
当水平滚动条滚到到中间时,一旦拖动垂直滚动条水平滚动条就跑到了最右端,请问这个问题如何解决啊?
当水平滚动条滚到到中间时,一旦拖动垂直滚动条水平滚动条就跑到了最右端,请问这个问题如何解决啊?
解决方案 »
- 关于鼠标在窗体中的坐标
- MFC UINT
- oracle instant client 是否支持 oracle 8i 的连接?
- ◆高手们请帮忙分析下这个图形ActiveX控件出错的原因!!!◆←----
- 我的 MSDN 2003 怎么没有VC.Net的帮助内容啊?
- 为什么在VC7中include一个头文件会出现错误??
- 小妹奉献最后30分求救:release和debug问题我还是出错!!!
- 关于CListCtrl
- Ring0驱动层如何获取模块Version
- 关于线程~~~~~重谢,70分!!!
- MFC 对话框类不能建立成功,帮看看原因啊.Unable to open the files()for class
- Create报错!!!
void CSkinScrollWnd::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CWnd *pWnd=m_wndLimit.GetWindow(GW_CHILD);
m_bOp=TRUE;
pWnd->SendMessage(WM_VSCROLL,MAKELONG(nSBCode,nPos),0);
//pWnd->SendMessage(WM_HSCROLL,MAKELONG(nSBCode,nPos),0);
m_bOp=FALSE;
if(nSBCode==SB_THUMBTRACK) return;
SCROLLINFO si={0};
si.cbSize=sizeof(si);
si.fMask=SIF_ALL;
pWnd->GetScrollInfo(SB_VERT,&si);
pScrollBar->SetScrollInfo(&si,TRUE);
//OnHScroll();
}void CSkinScrollWnd::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CWnd *pWnd=m_wndLimit.GetWindow(GW_CHILD);
m_bOp=TRUE;
//pWnd->SendMessage(WM_VSCROLL,MAKELONG(nSBCode,nPos),0);
pWnd->SendMessage(WM_HSCROLL,MAKELONG(nSBCode,nPos),0);
m_bOp=FALSE;
if(nSBCode==SB_THUMBTRACK) return;
SCROLLINFO si={0};
si.cbSize=sizeof(si);
si.fMask=SIF_ALL;
pWnd->GetScrollInfo(SB_HORZ,&si);
pScrollBar->SetScrollInfo(&si,TRUE);
}
m_wndLimit是什么类型?
m_wndLimit是什么类型?CWnd
在这个地方判断这个是为啥?
pWnd->SendMessage(WM_HSCROLL,MAKELONG(nSBCode,nPos),nPos);
试一下
{
if(message==WM_VSCROLL||message==WM_HSCROLL)
{
WORD sbCode=LOWORD(wParam);
if(sbCode==SB_THUMBTRACK
||sbCode==SB_THUMBPOSITION)
{
SCROLLINFO siv={0};
siv.cbSize=sizeof(SCROLLINFO);
siv.fMask=SIF_ALL;
SCROLLINFO sih=siv;
int nPos=HIWORD(wParam);
CRect rcClient;
GetClientRect(&rcClient);
GetScrollInfo(SB_VERT,&siv);
GetScrollInfo(SB_HORZ,&sih);
SIZE sizeAll;
if(sih.nPage==0)
sizeAll.cx=rcClient.right;
else
sizeAll.cx=rcClient.right*(sih.nMax+1)/sih.nPage ;
if(siv.nPage==0)
sizeAll.cy=rcClient.bottom;
else
sizeAll.cy=rcClient.bottom*(siv.nMax+1)/siv.nPage ;
SIZE size={0,0};
if(WM_VSCROLL==message)
{
//size.cx=sizeAll.cx*sih.nPos/(sih.nMax+1);
size.cy=sizeAll.cy*(nPos-siv.nPos)/(siv.nMax+1);
}else
{
size.cx=sizeAll.cx*(nPos-sih.nPos)/(sih.nMax+1);
//size.cy=sizeAll.cy*siv.nPos/(siv.nMax+1);
}
Scroll(size);
return 1;
}
}
return CListCtrl::WindowProc(message, wParam, lParam);
}
注释里面这2句