滚动条消息(Delphi自带滚动条控件的BUG) 大家可能认为这问题太菜,不值得讨论. 散了. (20分)

  • 主题发起人 主题发起人 wlmmlw
  • 开始时间 开始时间
W

wlmmlw

Unregistered / Unconfirmed
GUEST, unregistred user!
一个拥有滚动条的控件,在改变大小的时候,滚动条(操作系统的)也能更正到正确的位置和大小,请问操作系统是怎么得知要更正滚动条?如果由我们实现这项功能,应该怎么做?
 
带滚动条的窗口一般有两个SCROLLINFO结构保存滚动条信息,当大小改变的时候,调用
SetScrollInfo函数更新这个结构。其实滚动条也是独立的窗口,当它与另一个窗口捆绑的
时候,它的刷新就依赖所捆绑的窗口了。
你到底想实现什么?如果你要实现你是不是也需要调用这个API函数?
 
SendMessage(Memo1.Handle, EM_SCROLLCARET, 0, 0);

不大明白你的意思
 
是这样的,当滚动条所在的窗口接收WMSIZE时候我们能做一些更正操作.
在这些操作里我们可以重画滚动条.
我现在在写一个类,就是自定义滚动条,我的想法是我不需要由滚动条所在的窗口来调用我的重画过程,我要使用滚动条能够知道自己需要重新调整了.请赐教!
 
当ScrollBar单独作为一个窗口的时候,它无法获得自己需要更新的消息,除非你拖动滚动
条中的按钮。这时候的ScrollBar的功能类似于CommCtrl中的TrackBar。

更多的时候,滚动条是隐藏在另一个窗口后的,甚至连滚动条的窗口句柄也没有公开。更新
滚动条的消息全部由操作系统调用。如果一个窗口的Style中带WS_VSCROLL则会自动带上垂
直滚动条;如果Style中带有WS_HSCROLL则会自动带上水平滚动条,这时候根本不可以直接
操作滚动条,而是通过滚动条所在的窗口进行操作。即使如此,你仍然需要自己来维护滚
动条所需要的ScrollInfo结构。
 
如果自己写一个滚动条,需要注意哪些方面的问题?
 
如果Disable一个滚动条?
说话吧,不够我加分.
 
不要在原窗口的基础上自画滚动条,这样刷新很慢,我就试过,除非使用Detours.
 
用CreateSubClass
override GetClientRect应该可以吧.
 
大家有没有用过?????请试试!!!
 
我重画过memo的ClientRect,但是不包含滚动条部分,可以试试用GetDC,但是滚动条部分怎么重画就不知道了
 
我试过了,两者都可以重画,只是一直没时间写那个控件.
 
后退
顶部