说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

CSpin 类的问题(spin按纽分2块,如何区分是点了上面还是下面的子块呢?)

编辑:说三道四文库 发布时间:2018-08-19 09:26
HTML文档下载 WORD文档下载 PDF文档下载
如上,不问帮定的问题,只想知道如何实现点了上面就MessageBox("up");
点了向下的就MessageBox("down");
是在::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)中吗?怎么实现?
switch (nSBCode)
{
case SB_THUMBPOSITION:
pScrollBar->SetScrollPos(nPos);
break;
case SB_LINELEFT:
(pScrollBar->SetScrollPos)((pScrollBar->GetScrollPos())-1);
break;
case SB_LINERIGHT:
(pScrollBar->SetScrollPos)((pScrollBar->GetScrollPos())+1);
break;
case SB_PAGELEFT:
(pScrollBar->SetScrollPos)((pScrollBar->GetScrollPos())-15);
break;
case SB_PAGERIGHT:
(pScrollBar->SetScrollPos)((pScrollBar->GetScrollPos())+15);
break;
case SB_THUMBTRACK:
pScrollBar->SetScrollPos(nPos);
break;
}
SB_THUMBPOSITION  滚动到一个绝对位置
SB_LINELEFT       向左滚动(用与Hscroll)
SB_LINERIGHT      .......
case SB_PAGELEFT  向左滚动一页
SB_PAGERIGHT      ......
SB_THUMBTRACK     将滚动块拖动到指定的位置
有点明白了,是否spin作为滚动条,用edit和其帮定就是为了显示它的当前滑块位置?
那我还是不知道怎么判断是点了向上的还是向下的块,能再明白点吗?

难道要我用两个getpos()判断吗?
用OnVScroll好像不行。可以响应spin控件的UDN_DELTAPOS事件。根据pNMUpDown中iDelta的不同可以确定是点击上方或者下方的按钮。iDelta=1表示下方,iDelta=0表示上方
顺便做点贡献:
SB_BOTTOM   Scroll to bottom.

滚动到底部。 
SB_ENDSCROLL   End scroll.

结束滚动。 
SB_LINEDOWN   Scroll one line down.

向下滚动一行。 
SB_LINEUP   Scroll one line up.

向上滚动一行 
SB_PAGEDOWN   Scroll one page down.

向下滚动一页。 
SB_PAGEUP   Scroll one page up.

向上滚动一页。 
SB_THUMBPOSITION   Scroll to the absolute position. The current position is provided in nPos.

滚动到一个绝对位置。当前位置在nPos中指定。 
SB_THUMBTRACK   Drag scroll box to specified position. The current position is provided in nPos.

滚动到一个指定位置。当前位置在nPos中指定。 
SB_TOP   Scroll to top.

滚动到顶部 
测试 happyparrot(快乐鹦鹉) 办法
是iDelta=-1表示上方。这是我刚刚做例子后的结论。用OnVScroll点击上下两个点都响应SB_THUMBPOSITION,不管用。而UDN_DELTAPOS事件可以。因为iDelta表示增量,点上方则减1,点下方加1
::OnDeltaposSpin2(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
if(pNMUpDown->iDelta == -1)
MessageBox("up");
    if(pNMUpDown->iDelta == 1)
MessageBox("down");
*pResult = 0;
}

ok!!!!
向上是-1,下是1
谢谢
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘