窗口滚动条

 
问:为什么我移动滑动块时没有相应的动作?比如,滑动块总是在最上面,看起来
好象 WM_VSCROLL消息没有发送,或者函数OnVScroll()没有收到该消息.

答:VC文档CWnd类说明中指出:"CWnd同样也能使你的程序中建立一个新的子窗
口.从CWnd 中继承一个类,加入成员变量,用以保存你程序中自定义的数据.并
加入消息处理函数,用 以处理直接发向窗口的特定的消息. ..."
  试一下加入一个继承于CWnd的新类(比如 CMyWnd),在这个类中声明一个成员
变量 int vpos和建立一个对WM_VSCROLL (CMyWnd::OnVScroll)的消息映象,把
"OnVScroll()" 的所有处理加进去.
  函数showGraph()将由你的视类调用,在一开始,视类窗口被建立,然后初始化
一些成员 变量.


  win = new CMyWnd;
  win->Create(...)
你同样也能初始化vpos变量.相信会对你有所帮助.
2)看看你的源程序:

void Cview::showGraph()
{
 vpos = 0; //global variable
 RECT r;
 r.top = 50; r.left = 50;
 r.bottom = r.right = 400;
 win = new CWnd(); //win is a global pointer to CWnd
 win->Create(NULL," ",WS_BORDER|WS_VISIBLE|
    WS_VSCROLL, r,this,111,NULL);
 win->SetScrollRange(SB_VERT,0,RANGEMAX);
}

void Cview::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
 if (pScrollBar)
  return;
 switch(nSBCode)
 {
 case SB_PAGEDOWN:
  vpos += 10;
  if (vpos > RANGEMAX)
   vpos = RANGEMAX;
  break;
 case SB_PAGEUP:
  vpos -= 10;
  if (vpos <0) vpos="0;" break; } win->SetScrollPos(SB_VERT, vpos);
}
好象有件事情你忘记处理了,那就是在程序中没有初始化滚动条(即没有指定滑
动块的 位置),这可能是一切问题的源头.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值