WM_VSCROLL,WM_HSCROLL,在OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 中
分别处理nSBCode参考代码:
case SB_LINELEFT : //单击左箭头
SetScrollPos(SB_HORZ,pos-1);
if (pos !=0)
ScrollWindow(1,0);
break;
分别处理nSBCode参考代码:
case SB_LINELEFT : //单击左箭头
SetScrollPos(SB_HORZ,pos-1);
if (pos !=0)
ScrollWindow(1,0);
break;
解决方案 »
- 第三章:我的英语
- 关于wmfsdk使用问题,怎么调整wmv文件画面大小啊!用VC6.0
- 怎样在一个workspace中一个project引用其他project的内容?
- 求教,怎样修改网页中显示的字??比如我想把页面的简体字改为繁体显示,我用MFC编程
- 急问:一个数据库消息问题!!分不够可以再加!!
- 我要在isapi的动态库中调用.ocx的控件,这个控件是没有界面的,只是一个算法,怎么调用?
- HTTP CLILEN T 问题(XMLHTTP问题)
- 请教:在系统服务程序中怎样知道当前是否已有用户登录
- 有那为高手知道“灰度级”是什么意思?
- 请问为什么我写的com组件只能编译一次(vb),第二次就说权限被拒绝!!!
- 与Visual Assistant相关的几个问题
- 我新开发了两个软件包:请大家多多指教
我是用易语言写的程序,通过API发送信息给其它软件来控制该软件的窗口滚动.
我是这样做的:
static position=0;
::PostMessage(IEHwnd,WM_SYSCOMMAND,SC_VSCROLL,0);
::PostMessage(IEHwnd,WM_VSCROLL,MAKELONG(SB_THUMBTRACK,position),0);
position++;
然后在一个线程里循环执行这段代码。
这样是可以实现平滑滚动了,可是这样也不大好,最好是可以获得滚动条的当前位置,然后这样:
::PostMessage(IEHwnd,WM_SYSCOMMAND,SC_VSCROLL,0);
::PostMessage(IEHwnd,WM_VSCROLL,MAKELONG(SB_THUMBTRACK,滚动条当前位置+1),0);
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int pos,min,max,thumbwidth; SCROLLINFO ssi;
pScrollBar->GetScrollInfo(&ssi); pos=ssi.nPos;
max=ssi.nMax;
min=ssi.nMin;
thumbwidth=ssi.nPage; switch(nSBCode)
{
case SB_THUMBTRACK: //拖动滚动条
pScrollBar->SetScrollPos(nPos);
TempX-=pos-nPos;
if(TempX<0)
TempX=0;
else if(TempX>width-WD)
TempX=width-WD;
else
DrawBmp(*GetDC()); break; case SB_LINELEFT: //单击左箭头
if(pos!=0)
{
pScrollBar->SetScrollPos(pos-1);
TempX--;
if(TempX<0)
TempX=0;
else
DrawBmp(*GetDC());
}
break; case SB_LINERIGHT: //单击右箭头
if(pos+thumbwidth<=max)
{
pScrollBar->SetScrollPos(pos+1);
TempX++;
if(TempX>width-WD)
TempX=width-WD;
else
DrawBmp(*GetDC());
}
break; case SB_PAGELEFT: //在滚动块的左方空白滚动区域单击
if(pos>=thumbwidth)
{
pScrollBar->SetScrollPos(pos-thumbwidth);
}
else
{
pScrollBar->SetScrollPos(0);
}
TempX-=thumbwidth;
if(TempX<0)
TempX=0;
else
DrawBmp(*GetDC());
break; case SB_PAGERIGHT: //在滚动块的右方空白滚动区域单击
if(pos+thumbwidth<=max-thumbwidth)
{
pScrollBar->SetScrollPos(pos+thumbwidth);
}
else
{
pScrollBar->SetScrollPos(max-thumbwidth);
}
TempX+=thumbwidth;
if(TempX>width-WD)
TempX=width-WD;
else
DrawBmp(*GetDC());
break;
} CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
我的这个代码是载入图片时进行水平滚动时的变化的,如果需要响应所谓的鼠标点击拖动的话,你需要添加
case SB_LINERIGHT:
和
case SB_LINERIGHT:
然后自己计算点击一次滚动的位移。
至于文本的滚动相对来说更简单点,把代码里面的DrawBmp(*GetDC());换成LoadText就行了。