求教:关于控件中的滚动条事件........

ak_ing 2012-10-19 09:53:10
一个MFC控件,继承自COleControl,在PreCreateWindow函数中,指定其样式如下:

cs.lpszClass = _T("COMBOBOX");
cs.style = CBS_SORT|CBS_DROPDOWNLIST|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL ;

这样,在运行时,这个控件就会变成下拉列表框。
在列表下拉之后,如果列表元素很多在右侧出现垂直方向的滚动条。
现在在连续单击滚动条的向下按钮时,控件会很卡。

现在,我想得到滚动条的向下滚动按钮的单击事件,在####Ctrl类中添加了OnVScroll函数,断点无法进入。

恳请各位指点,如何获得翻页的单击事件,或者如何解决下拉框滚动时的卡顿现象。
...全文
142 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ak_ing 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

那个滚动条是在ListBox上,你可能需要在WM_CTLCOLORLISTBOX消息响应中子类化ComboBox控件的下拉列表框控件ListBox,在CListBox的派生类中处理WM_VSCROLL事件。
[/Quote]

明白了您的意思了,做了一下实验,确实可以。成功获取到了消息,十分感谢十分感谢!!
ak_ing 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

'继承自COleControl的一个控件'
哪里来的?DLL 还是 代码?
[/Quote]

是代码
傻X 2012-10-20
  • 打赏
  • 举报
回复
很卡的缘故是因为频繁重绘。

ListBox的那个控件用WS_CLIPCHILDREN风格看看。该风格对于子窗体所在位置不重绘。
schlafenhamster 2012-10-20
  • 打赏
  • 举报
回复
COleControl 可能另有一套 函数。
Eleven 2012-10-20
  • 打赏
  • 举报
回复
那个滚动条是在ListBox上,你可能需要在WM_CTLCOLORLISTBOX消息响应中子类化ComboBox控件的下拉列表框控件ListBox,在CListBox的派生类中处理WM_VSCROLL事件。
ak_ing 2012-10-20
  • 打赏
  • 举报
回复

COMBOBOXINFO cbi;
cbi.cbSize=sizeof(COMBOBOXINFO);
GetComboBoxInfo(m_hWnd,&cbi);

SCROLLBARINFO scbinfo;
scbinfo.cbSize = sizeof(SCROLLBARINFO);
BOOL b = GetScrollBarInfo(cbi.hwndList, OBJID_VSCROLL, &scbinfo);
DWORD dw = 999;
dw = scbinfo.rgstate[0];
dw = scbinfo.rgstate[1];
dw = scbinfo.rgstate[2];
dw = scbinfo.rgstate[3];
dw = scbinfo.rgstate[4];
dw = scbinfo.rgstate[5];
if (scbinfo.rgstate[5] == STATE_SYSTEM_PRESSED)
{
int i = 0;
}

这样还是取不到,请大家指导!!
schlafenhamster 2012-10-20
  • 打赏
  • 举报
回复
'继承自COleControl的一个控件'
哪里来的?DLL 还是 代码?
ak_ing 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

那个滚动条是在ListBox上,你可能需要在WM_CTLCOLORLISTBOX消息响应中子类化ComboBox控件的下拉列表框控件ListBox,在CListBox的派生类中处理WM_VSCROLL事件。
[/Quote]

您好,这个是对于普通控件来说的吧?我现在是继承自COleControl的一个控件。不知道我是不是理解的有误。请指导。
ak_ing 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

COleControl 可能另有一套 函数。
[/Quote]

对啊,我现在找了很长时间了,但是那个消息响应一直捕获不到。求指导!
ak_ing 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

很卡的缘故是因为频繁重绘。

ListBox的那个控件用WS_CLIPCHILDREN风格看看。该风格对于子窗体所在位置不重绘。
[/Quote]

请问,WS_CLIPCHILDREN风格是要在控件的PreCreateWindow里面用cs.style实现吗?
我在cs.style里面试了一下不管用..

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧