问:为什么我移动滑动块时没有相应的动作?比如,滑动块总是在最上面,看起来 好象 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); } 好象有件事情你忘记处理了,那就是在程序中没有初始化滚动条(即没有指定滑 动块的 位置),这可能是一切问题的源头. |