15,979
社区成员
发帖
与我相关
我的任务
分享
void CColorBaseDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
if(!m_baseDlgSetInfo.m_memDCInit)
return ;
dc.SelectClipRgn(&m_cltControlShow.clientRgn, RGN_COPY);
dc.BitBlt(m_clientRect.left, m_clientRect.top,m_clientRect.Width(), m_clientRect.Height(), &m_cltControlShow.memDC, 0, 0, SRCCOPY);
CDialog::OnPaint();
}
void CxxxxDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
// CDC *pDC=GetDC();
// pDC->SetMapMode(MM_LOMETRIC);
// CPoint pt(0,20);
// pDC->DPtoLP(&pt);
// ReleaseDC(pDC);
// afxDump << pt.y << "\n";// 71
#if 0
SCROLLINFO scrollinfo;
GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
switch (nSBCode)
{
case SB_BOTTOM: //滑块滚动到最底部
ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax)*10); //滚动屏幕
scrollinfo.nPos = scrollinfo.nMax; //设定滑块新位置
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); //更新滑块位置
break;
case SB_TOP: //滑块滚动到最顶部
ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin)*SCROLL_LINE);
scrollinfo.nPos = scrollinfo.nMin;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
case SB_LINEUP: //单击上箭头
scrollinfo.nPos -= 1;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,SCROLL_LINE);
break;
case SB_LINEDOWN: //单击下箭头
scrollinfo.nPos += 1;
if (scrollinfo.nPos>scrollinfo.nMax)
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,-SCROLL_LINE);
break;
case SB_PAGEUP: //单击滑块上方空白区域
scrollinfo.nPos -= 5;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,SCROLL_LINE*5);
break;
case SB_PAGEDOWN: //单击滑块下方空白区域
scrollinfo.nPos += 5;
if (scrollinfo.nPos>scrollinfo.nMax)
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,-SCROLL_LINE*5);
break;
case SB_ENDSCROLL: //鼠标离开滑块,结束滑块拖动
// MessageBox("SB_ENDSCROLL");
break;
case SB_THUMBPOSITION:
// ScrollWindow(0,(scrollinfo.nPos-nPos)*SCROLL_LINE);
// scrollinfo.nPos = nPos;
// SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
case SB_THUMBTRACK: //拖动滑块
ScrollWindow(0,(scrollinfo.nPos-nPos)*SCROLL_LINE);
scrollinfo.nPos = nPos;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
}
#else
SCROLLINFO ScrollInfo;
ScrollInfo.cbSize=sizeof(ScrollInfo);
ScrollInfo.fMask = SIF_ALL;
GetScrollInfo(SB_VERT,&ScrollInfo);
//
int delta=0;
switch(nSBCode)
{
case SB_TOP:
case SB_LINEUP:
if(ScrollInfo.nPos > ScrollInfo.nMin) delta = -1;//one line
break;
case SB_BOTTOM:
case SB_LINEDOWN:
if(ScrollInfo.nPos < (ScrollInfo.nMax-(int)ScrollInfo.nPage)) delta = 1;
break;
case SB_PAGEUP: //单击滑块上方空白区域
if(ScrollInfo.nPos > ScrollInfo.nMin) delta = -5;// 5 lines
break;
case SB_PAGEDOWN: //单击滑块下方空白区域
if(ScrollInfo.nPos < (ScrollInfo.nMax-(int)ScrollInfo.nPage)) delta = 5;
break;
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
delta = ScrollInfo.nTrackPos-ScrollInfo.nPos;
// afxDump << ScrollInfo.nTrackPos << ";";// nax=100
// see SetScrollRange(SB_VERT, 0, 100, TRUE);
// afxDump << ScrollInfo.nPos << "\n";
break;
}
if(delta !=0 )
{//
ScrollWindow(0,-SCROLL_LINE*delta);// pixels
ScrollInfo.nPos += delta;// lines
ScrollInfo.fMask=SIF_POS | SIF_RANGE;
SetScrollInfo(SB_VERT,&ScrollInfo);
}
#endif
// CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}