自己动态创建的CScrollBar,怎样才能实现拖动滚动条呢? 我的点击能够实现滚动条的移动了,但是不知道怎样实现拖动滚动条! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要响应SB_THUMBTRACK消息然后调用SetScrollPos 头文件里添加 afx_msg void VScroll(UINT nSBCode, UINT nPos);.cpp文件里添加 BEGIN_MESSAGE_MAP(CDropScrollBar, CScrollBar) //{{AFX_MSG_MAP(CDropScrollBar) …… ON_WM_VSCROLL_REFLECT() …… //}}AFX_MSG_MAPEND_MESSAGE_MAP()void C****ScrollBar::VScroll(UINT nSBCode, UINT nPos) { // TODO: Add your message handler code here if( !m_pListBox ) return; int nTop = m_pListBox->GetTopIndex(); int nBottom = m_pListBox->GetBottomIndex(); SCROLLINFO info; info.cbSize = sizeof(SCROLLINFO); if( !GetScrollInfo( &info, SIF_ALL|SIF_DISABLENOSCROLL ) ) return; switch( nSBCode ) { case SB_BOTTOM: // Scroll to bottom. break; case SB_ENDSCROLL: // End scroll. break; case SB_LINEDOWN: // Scroll one line down. info.nPos++; if( info.nPos > info.nMax ) info.nPos = info.nMax; m_pListBox->SetTopIdx( info.nPos ); break; case SB_LINEUP: // Scroll one line up. info.nPos--; if( info.nPos < info.nMin ) info.nPos = info.nMin; m_pListBox->SetTopIdx( info.nPos ); break; case SB_PAGEDOWN: // Scroll one page down. info.nPos += info.nPage; if( info.nPos > info.nMax ) info.nPos = info.nMax; m_pListBox->SetTopIdx( info.nPos ); break; case SB_PAGEUP: // Scroll one page up. info.nPos -= info.nPage; if( info.nPos < info.nMin ) info.nPos = info.nMin; m_pListBox->SetTopIdx( info.nPos ); break; case SB_THUMBPOSITION: // Scroll to the absolute position. The current position is provided in nPos. info.nPos = nPos; m_pListBox->SetTopIdx( info.nPos ); break; case SB_THUMBTRACK: // Drag scroll box to specified position. The current position is provided in nPos. info.nPos = nPos; m_pListBox->SetTopIdx( info.nPos ); break; case SB_TOP: // Scroll to top. break; } SetScrollInfo( &info ); } 把m_pListBox部分干掉,修改一下即可 OpenCV为什么只保存视频的前景帧后得到的是无效的文件?附代码 MFC窗口分割大小设定 急~~~系统托盘问题 请问,什么样的编译器能编译mfc 在VC++中如何获得浮点数的小数部分和整数部分???!!!! 怎么消除错误 MFC主窗口弹出另外窗口,关闭主窗口不影响弹出的窗口 新手求助:VC数据采集 为什么程序运行什么也没有 winsock用UDP广播,为什么只有跟服务器同网段的客户端收到,其他网段无法收 为什么vs2005下都要手动转函数格式 动态创建类的问题
然后调用SetScrollPos
afx_msg void VScroll(UINT nSBCode, UINT nPos);.cpp文件里添加
BEGIN_MESSAGE_MAP(CDropScrollBar, CScrollBar)
//{{AFX_MSG_MAP(CDropScrollBar)
……
ON_WM_VSCROLL_REFLECT()
……
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void C****ScrollBar::VScroll(UINT nSBCode, UINT nPos)
{
// TODO: Add your message handler code here
if( !m_pListBox )
return; int nTop = m_pListBox->GetTopIndex();
int nBottom = m_pListBox->GetBottomIndex(); SCROLLINFO info; info.cbSize = sizeof(SCROLLINFO);
if( !GetScrollInfo( &info, SIF_ALL|SIF_DISABLENOSCROLL ) )
return; switch( nSBCode )
{
case SB_BOTTOM: // Scroll to bottom.
break; case SB_ENDSCROLL: // End scroll.
break; case SB_LINEDOWN: // Scroll one line down.
info.nPos++;
if( info.nPos > info.nMax )
info.nPos = info.nMax;
m_pListBox->SetTopIdx( info.nPos );
break; case SB_LINEUP: // Scroll one line up.
info.nPos--;
if( info.nPos < info.nMin )
info.nPos = info.nMin;
m_pListBox->SetTopIdx( info.nPos );
break; case SB_PAGEDOWN: // Scroll one page down.
info.nPos += info.nPage;
if( info.nPos > info.nMax )
info.nPos = info.nMax;
m_pListBox->SetTopIdx( info.nPos );
break; case SB_PAGEUP: // Scroll one page up.
info.nPos -= info.nPage;
if( info.nPos < info.nMin )
info.nPos = info.nMin;
m_pListBox->SetTopIdx( info.nPos );
break; case SB_THUMBPOSITION: // Scroll to the absolute position. The current position is provided in nPos.
info.nPos = nPos;
m_pListBox->SetTopIdx( info.nPos );
break; case SB_THUMBTRACK: // Drag scroll box to specified position. The current position is provided in nPos.
info.nPos = nPos;
m_pListBox->SetTopIdx( info.nPos );
break; case SB_TOP: // Scroll to top.
break; }
SetScrollInfo( &info );
}