说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

对话框垂直滚动条不起作用

编辑:说三道四文库 发布时间:2018-04-26 02:33
HTML文档下载 WORD文档下载 PDF文档下载
    起用了对话框的垂直滚动条,重载了OnVScroll,但进入不了OnVScroll方法。
    
void OnVScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar);
void CMainMenuDlgI::OnVScroll(UINT   nSBCode,   UINT   nPos,   CScrollBar*   pScrollBar)     
{   
switch   (nSBCode)   
{   
case   SB_LINEUP:         
ScrollWindow(0,-10,NULL,NULL);   
break;   
case   SB_LINEDOWN:   
ScrollWindow(0,10,NULL,NULL);   
break;   
default:   
break;   
}   
}
在初始化的地方先调用下:SetScrollInfo。
关注
  我是用拖控件的方式创建一个对话框,当控件超出屏幕时,不会自动纵向弹出滚动条,请问怎么实现滚动条功能?
关注
在创建对话框的时候,可能样式没有选择滚动条
1.sp下资源编辑器中将对话框的属性vertical scrollbar设置为true. 会自动滚动。

2.PPC下即使你设置了上面的属性也不会自动滚动,所以其实可以不设置,
否则一开始就能看到滚动条,即使你的对话框大小并没有超过屏幕。
推荐如下操作:
(1)OnInitiaDialog的时候,SetScrollInfo()直接设置你想要的滚动条大小(包括max/min/page/pos等)
(2)WM_VSCROLL 的处理,在这里边实现窗口的滚动。
滚动窗口的话,用ScrollWindowEx,对话框的话,ScrollWindowEx的flag参数设置为SW_SCROLLCHILDREN就OK。
(3)你可以在任何时候改变你的滚动条的参数,我一般是在OnSize中判断当前的软键盘是否弹出,以及当前的横屏状态然后设置滚动条的。

小规律:竖屏状态(软键盘没弹出),滚动条需要设置成n长度才可完全显示对话框,
        则竖屏状态(软键盘弹出)需要设置滚动条为n+80,
        然后横屏(没弹出)也为n+80,
        然后横屏状态软键盘弹出为n+80+80,
谢谢
试了一下,不起作用,请问有示例代码吗
引用 9 楼 lorsa 的回复:
试了一下,不起作用,请问有示例代码吗


不起作用是什么意思?
窗口不滚动?
路过学习
窗口不滚动,请问有示例代码吗
引用 12 楼 lorsa 的回复:
窗口不滚动,请问有示例代码吗


前面说过的啊。PPC上窗口滚动是得自己手工实现的。

用ScrollWindowEx,如果是对话框的话,flag参数设置为SW_SCROLLCHILDREN,子控件才会一起移动,至于移动多少,是向上还是向下得自己计算。
我一般就是在WM_VSCROLL消息中,根据npos和设置好的滚动条的page来计算。
另外的,你现在捕捉到wm_vscorll消息了没?
同意sevenzhy大侠的观点。
最近本人恰好使用过对话框自带滚动条,基本上有这么3个步骤:
(1)静态设计对话框界面时,首先要设置属性vertical scrollbar为true
(2)在对话框初始化或者处理WM_SIZE消息时,设置滚动条的初始状态(min/max/page/pos).
   设置的方法有两种,[1]通过SCROLLBAR的API函数[2]通过修改SCROLLINFO结构
(3)处理WM_VSCROLL消息,添加相应的事件处理,并滚动对话框
注意:如果仅仅滚动对话框本身,调用ScrollWindow即可;但是要滚动对话框上的子控件,请调用ScrollWindowEx函数。
附微软的例子:http://support.microsoft.com/kb/262954
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘