ModifyStyle()调用不起作用

news/2024/11/23 23:24:08/

现象:在使用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当列表框的项不够时,垂直滚动条禁活:没有该属性时,滚动条隐藏

 

 


http://www.ppmy.cn/news/883746.html

相关文章

$(...).modal is not a function的解决办法

最近在练习ssm框架的时候遇到了一个小问题,无法识别bootstrap.min.js的modal方法,控制台报错$(...).modal is not a function。 于是测试测试了一下 发现可以正常弹框,然后又检查了id是不是写错了,也没写错。突然没了头绪。为什么…

user-modify

最近入职开始工作了&#xff0c;碰到一个很有意思的问题&#xff0c;后端传回来的文章内容<a>标签内的内容可以编辑。 很不理解&#xff0c;我从后端取到的数据这该怎么改呢。 问了同事&#xff08;导师&#xff09;&#xff0c;让我试试contenteditable属性&#xff0c;…

missing modality

THE MODALITY FOCUSING HYPOTHESIS: TOWARDS modal-general的知识是对于cross modality KD决定性的。 想要解决的问题是&#xff1a;crossmodal KD是否总是有效的&#xff1f; 文章通过实验证明即使多模态teacher能够取得更好的结果&#xff0c;但cross蒸馏过后的student mod…

This old-style function definition is not preceded by a prototype

文章目录 Introwarning 及解决 截屏知其然&#xff0c;却不知其所以然 Intro 在 Xcode 14 中随意写了几个C命令行程序&#xff0c;编译运行OK。 但是有以下两种报错&#xff1a; This old-style function definition is not preceded by a prototype This function declarati…

关于ModifyStyleEx无效的问题

在做MFC时&#xff0c;有时候我们需要显示选择一个项目&#xff0c;比如需要标记所选择的图片控件。我们可以用这个函数&#xff1a; BOOLModifyStyleEx ( DWORD dwRemove, DWORD dwAdd, UINT nFlags ) 或者 BOOLModifyStyle ( DWORD dwRemove, DWORD dwAdd, UINT nF…

ModifyStyle

CWnd::ModifyStyle 1.作用 : 调用这个函数修改窗口的风格 2.函数原型: BOOL ModifyStyle ( DWORD dwRemove, DWORD dwAdd, UINT nFlags0 ); 3.参数含义: dwRemove 指定修改时要删除的窗风格。 dwAdd 指定修改时将要增加的窗口风格。 nFlags 该参数将被传给SetWindowPos&#x…

关于ModifyStyle ModifyStyleEx修改自定义控件的问题

继承于MFC控件&#xff0c;比如CStatic CEdit等等&#xff0c;在自定义代码中许多人反映无法更改控件的外观属相&#xff0c;这是因为大部分人没有通知主窗体自定义控件的外观更改了&#xff0c;可以使用下列代码进行更改&#xff1a; ModifyStyle(WS_BORDER,0,SWP_DRAWFRAME);…

ModifyStyle, ModifyStyleEx

1.wtl 中的CListViewCtrl调用ModifyStyle, ModifyStyleEx, 不起作用, 改成 _listCtrl.SetExtendedListViewStyle(_listCtrl.GetExtendedListViewStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES, 0); 参照http://www.cppblog.com/qiaodong/archive/2007/03/19/20153.html…