ModifyStyle()调用不起作用

ModifyStyle()调用不起作用现象:在使用WTL做CListBox子类化时,使用 ModifyStyle(0,LBS_OWNERDRAWFIXED)不起作用;原因:并不是所有的风格都可以动态利用ModifyStyle/ModifyStyleEx()函数增加和去除,有些风格比如LBS_HASSTRINGS|LBS_OWNERDRAWFIXED|LBS_OWNERDRAWVARIABLE 就只能在创建窗口的时候指定(

ModifyStyle()调用不起作用

现象:在使用WTL做CListBox子类化时,使用 ModifyStyle(0, LBS_OWNERDRAWFIXED)不起作用;

原因:并不是所有的风格都可以动态利用ModifyStyle/ModifyStyleEx()函数增加和去除,有些风格比如 LBS_HASSTRINGS | LBS_OWNERDRAWFIXED| LBS_OWNERDRAWVARIABLE 就只能在创建窗口的时候指定(其后再增加是无效的),也就是说你只能创建的之前指定。

解决:自己动态创建控件,或在待子类化的ListBox控件中指定属性(如LBS_HASSTRINGS | LBS_OWNERDRAWFIXED| LBS_OWNERDRAWVARIABLE )

 

附:

1) code   project中的解释

It   is   not   possible   to   change   these   styles   at   runtime   even   though   ModifyStyle()   may   give   the   impression   it   does.   If   you   want   turn   the   Sort   style   on   and   off   for   example   it   is   best   to   construct   the   List   box   by   calling   new   and   Create   then   deleting   it   and   creating   a   new   one   when   the   style   is   to   be   changed.   Alternatively   you   can   have   2   List   box   superimposed   and   hide   the   one   with   the   incorrect   style. 

也就是说,无办法动态改变那些只能在创建时设置地style

2) ListBox的样式说明

风格取值
描述
LBS_EXTENDEDSEL能通过Shift键或者鼠标进行多选
LBS_HASSTRINGS可以用GetText函数得到列表框里选项的字符串
LBS_MULTICOLUMN指定列表框以多列形式显示内容
LBS_MULTIPLESEL用户可以选择多个项
LBS_NOINTEGRALHEIGHT当应用程序创建列表框时,列表框的大小由系统指定
LBS_NOREDRAW列表框不响应用户的修改,可以通过发送WM_REDRAW 来取消该设置
LBS_NOTIFY让主窗口接收列表框的任何改变的消息
LBS_OWNERDRAWFIXED主窗口负责列表框的重画,列表框里每项的高度相同(因此不会有WM_MeasureItem消息)
LBS_0WNERDRAWVARIABLE主窗口负责列表框的重画,列表框里每项的高度可以变化
LBS_SORT按各项名称的字母排序
LBS_STANDARD等同于LBS_SORT和LBS_NOTIFY
LBS_USETABSTOPS允许用户使用Tab键在各项中切换
LBS_WANTKEYBOARDINPUT输入焦点在列表框时,任何键盘输入都会向父窗口发送WM_VKEYTOITEM或者WM_CHARTOITEM消息
LBS_DISABLENOSCROLI当列表框的项不够时,垂直滚动条禁活:没有该属性时,滚动条隐藏

 

 

今天的文章ModifyStyle()调用不起作用分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/27835.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注