VC中CCheckListBox显示时崩溃的原因及解决方法

VC6.0--CListCtrl中的NM_CLICK事件(CheckBox通过Shift与鼠标左键实现多选) void CMyClass::OnClickLVSheets(NMHDR* pNMHDR, LRESULT* pResult) {    // TODO:     DWORD dwPos = GetMessagePos();    CPoint point( LOWORD(dwPos), HIWORD(dwPos) );        m_lv_sheets.ScreenT 阅读详情

     CCheckListBox可以实现带CheckBox的ListBox,VC6自带,头文件Afxwin.h;
     但不支持托放式加入界面(再次骂下开发VC的MS人员,UI支持超级弱智!)。

     有个方法比较简单,在窗口拖放一个CListBox(不会不知道是哪个吧?那就撞墙好了。),ID是IDC_LIST1,在类向导器里创建一个Control型变量,如m_List,在窗口类里将会有

  1. CListBox m_List;   //将CListBox修改成CCheckListBox;

    直接这样还是不行滴!直接运行你会发现显示(已插入Item情况下)或点那个listbox时(listbox还空着,未插入Item情况下)会崩溃,debug会停留在list的DrawItem方法。

    让我们看看这个类的DrawItem方法:

  1. void CCheckListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
  2. {
  3.     // You must override DrawItem and MeasureItem for LBS_OWNERDRAWVARIABLE
  4.     ASSERT((GetStyle() & (LBS_OWNERDRAWFIXED | LBS_HASSTRINGS)) ==
  5.         (LBS_OWNERDRAWFIXED | LBS_HASSTRINGS));

     也就是说它的style必须要有LBS_OWNERDRAWFIXED(列表中的所有项的高度都相同)或LBS_OWNERDRAWVARIABLE(列表中项的高度各不相同)两种style之一,还必须要有 LBS_HASSTRINGS 样式;否则是会ASSERT的。

    其中,LBS_HASSTRING样式在MSDN中的解释是:

LBS_HASSTRINGS   Specifies an owner-draw list box that contains items consisting of strings. The list box maintains the memory and pointers for the strings so the application can use the GetText member function to retrieve the text for a particular item.

 

     再让我们看看它的Create方法:

  1. BOOL CCheckListBox::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
  2. {
  3.     if (!(dwStyle & LBS_OWNERDRAWVARIABLE)) //must be one or the other
  4.         dwStyle |= LBS_OWNERDRAWFIXED;
  5.     return CListBox::Create(dwStyle, rect, pParentWnd, nID);
  6. }

      这段代码会自动给你添加LBS_OWNERDRAWVARIABLE或是LBS_OWNERDRAWFIXED样式;

 

      在MSDN里,CCheckListBox::Create方法里有段介绍
dwStyle
Specifies the style of the checklist box. The style must be either LBS_OWNERDRAWFIXED (all items in the list are the same height) or LBS_OWNERDRAWVARIABLE (items in the list are of varying heights).

 

      因此,我们必须在设置这两个样式之一;若是使用Create方法创建,可以设置第一个参数;若是使用前文介绍的方法创建的,可以在IDE中设置:在ListBox属性对话框的Style页面,左下角的“Owner draw:”菜单选后两个选项之一。其中选择Fixed样式后,将不支持选项的多列显示。若下图所示。

  

     另,还有一种方法可以添加这两种样式,即使用 ModifyStyle 方法!该方法由祖类 CWnd 类提供。用于修改样式。

 

    对于 LBS_HASSTRINGS 样式,IDE提供的设置方法是属性对话框的 Styles页面的“Has Strings”复选框,它默认是未选中状态,所以切记把它给勾上。如下图:

AI Agent技术架构与规模化应用:2025年技术深度解析 2025年,AI Agent(人工智能智能体)迎来了规模化应用的拐点刻。根据Gartner等权威机构预测,企业软件中整合自主型AI的比例将从2024年的不足1%跃升至2028年的33%。本文深入剖析AI Agent的核心技术架构,从规划模块、记忆模块、工具调用模块到底层实现原理,结合Python和Go语言的实际代码示例,全面阐述AI Agent的技术实现路径。同,本文探讨多智能体协作系统、企业级部署架构以及未来的技术演进方向,为开发者和技术决策者提供系统性的技术参考。关键词:AI Agent、大语言模型 阅读详情

相关推荐

ubuntu22.04降级安装CUDA11.3

ubuntu22.04原CUDA12.1降级安装11.3

gls_nuaa的博客 1750

VC++ CheckBox 自绘

对checkBox进行自绘,可以实现修改背景色,背景图片,对于已选和未选状态分别显示不同的图片

MFC高级列表控件VSListBox完全指南:从入门到精通

本文详细介绍了MFC框架中的VSListBox高级列表控件,包括其创建初始化、属性设置、自定义样式、派生类扩展及性能优化等内容。VSListBox支持多列显示、复选框、拖放操作等丰富功能,可通过资源文件添加控件并绑定变量。文章展示了如何设置基本属性、列属性和项目属性,并提供了自定义绘制实现高级视觉效果的方法。此外,还介绍了创建功能增强的派生类,实现数据绑定、验证和编辑功能,以及界面布局管理和工具栏集成。针对大数据量场景,文章提出了虚拟模式、延迟加载等优化方案。通过合理配置和扩展VSListBox,可以构建功

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 99

MFC - 控件 - VSLISTBOX

VSListBox与其它list控件不同,它们的类从CStatic的继承已经分开了,并且vslistbox比较封闭,没有提供任何消息间和命令,我们使用该控件的唯一方法是,通过重载其中虚函数的方式来实现我们的功能。虽然vslistbox非常封闭,但是我们依然可以从微软MSDN的文档中窥见一隅,实现一些并不十分复杂的功能。MFC中CVSListBox看起来很好的样子,其实并不是像看起来那样。这个控件封装的很严密,在向导里并不能添加消息响应事件之类的东西。

wu_zhiyuan的博客 1755

MFC checkbox使用方法

MFC中复选框checkbox控件,至少有三种方法对其进行操作,他们是利用Cbutton成员函数GetCheck和SetCheck,第二种是利用CWnd成员函数IsDlgButtonChecked,最后就是把checkbox复选框控件与BOOL型变量相关联。 一、用CButton成员函数 MFC中复选框CheckBox的基类是CButton。那么就可以用GetDlgItem来获取复选框的指针,

dearmango 1万+

CListCtrl Checkbox 被点击消息捕获 判断单击 click响应 单击消息 单击状态

原文来自:http://blog.163.com/danshiming%40126/blog/static/10941274820134244250444/ 找了很多,有说响应NM_CLICK的,有说响应ItemChanged的,还是上面网址的哥们好使。不过我这里放出函数的创建过程,方便初学者,大家拿去happy吧。 1、在h文件定义函数: afx_msg  void CDlgFIFO::O

LYJ个人博客,记录技术、八卦、生活,分享各种心得,期待与朋友们一同进步 4302

VS2010中新控件的编程------字体、链接、浏览等空间的编程

字体、链接、浏览等空间的编程 1)    字体列表 在资源中加入Combox控件,并将属性设置为dropList,将OwnerDraw属性设置为Fixed,将has strings属性设置为TRUE。利用ClassWizard为该控件设置CMFCFontComboBox变量,利用该类的成员函数进行属性设置和变量。        m_FontCombox.SelectFont(_T("Aria

mr_liyonghong的专栏 3015

cchecklistbox

<br />CCheckListBox可以实现带CheckBox的ListBox,VC6自带,头文件Afxwin.h;<br />但不支持托放式加入界面(再次骂下开发VC的MS人员,UI支持超级弱智!)。<br />有个方法比较简单,在窗口拖放一个CListBox(不会不知道是哪个吧?那就撞墙好了。),ID是IDC_LIST1,在类向导器里创建一个Control型变量,如m_List,在窗口类里将会有<br />CListBox m_List;<br />将CListBox修改成CCheckListBox

longgogo的专栏 694

VCCCheckListBox使用注意事项

CCheckListBox可以实现带CheckBox的ListBox,VC6自带,头文件Afxwin.h;   但不支持托放式加入界面(再次骂下开发VC的MS人员,UI支持超级弱智!)。   有个方法比较简单,在窗口拖放一个CListBox(不会不知道是哪个吧?那就撞墙好了。),ID是IDC_LIST1,在类向导器里创建一个Control型变量,如m_List,在窗口类里...

weixin_33769207的博客 229

vc中如何获取checkbox的值(转)

2007年06月06日 星期三 09:11 P.M.VC6.0可用的代码段:CButton    *pButton    =    (CButton    *)GetDlgItem(checkbox的ID);   int i = pButton->GetCheck();i得到的值就是checkbox的选定值;GetDlgItem  函数功能:该函数检索指定的对话框中的控件句柄。   函数原型:HWND GetDlgltem(HWND hDlg,int nlDDlgltem);   参数:   hDlg:标识

lwprain的专栏 7370

checkbox批量删除功能

今天来实现一个批量删除的功能:批量删除的功能呢,首先前台页面可以想到使用checkbox来做,这里后台数据库其实有两种删除的方式,如下:但是不管数据库以哪种形式的sql删除,想要批量删除,那么前台传到后台的id肯定是多个哟!!!1、下面就正式开如吧,下面是前台代码片段,迭代的候取得它的索引号:这个索引是从0开始的,如果想要1,那么就+1就好啦—-${st.index+1}(如下图:)当然啦,上面图

lwh_zfj的博客 2万+

重绘复选框控件

复选框的绘制与按钮基本相同,因为复选框本质上还是按钮。与按钮稍有区别的地方是:复选框的状态需要手动维护。 我们可以定义一个名为m_nCheck 的成员变量,维护复选框状态。 主要代码如下: LRESULT CCheckBoxEx::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)  { // TODO: Add your spe

白月光的专栏 2676

关于复选框checkbox的选中问题

主要通过<c:if test="${fn:contains(product.zerenType,'1')}">checked</c:if>来判断是否选中了该分类。问题是,怎么通过后端传过来的数据(直接是分类的json字符串)来自动选择好前端的checked属性。1.业务的需求是前端显示一个复选框,如图所示。后端接收后通过转成string存入数据库。

LoginHaoYu的博客 250

问题解决——CVSListBox的使用

问题解决——CVSListBox的使用

xuan2717的博客 287

CCheckListBox的BUG

作者:WindsonZhL 原文:http://bbs.csdn.net/topics/390977716 不知道M.S.为什么会出现这样的失误 BUG1: CCheckListBox::DrawItem方法中 C/C++ code ? 1 2 if (m_cyText == 0)     VERIFY(cyI

worldy的专栏 1427

CVSListBox类的扩展使用

CVSListBox类的扩展使用 2013-5-2 flyfish   www.boboding.com   一 在资源窗口中,选中资源右键-》资源包括-》输入如下代码 #ifndef_AFXDLL #include"afxribbon.rc" #endif   二 新建一个基于对话框的项目 将工具箱中的MFCVSListBox Control直接拖到窗口中 利用向导为该控

二分掌柜的 6476

listbox java_CVSListBox类的扩展使用

CVSListBox类的扩展使用2013-5-2flyfish一 在资源窗口中,选中资源右键-》资源包括-》输入如下代码#ifndef_AFXDLL#include"afxribbon.rc"#endif二 新建一个基于对话框的项目将工具箱中的MFCVSListBox Control直接拖到窗口中利用向导为该控件绑定一个变量CVSListBox m_List_ctlMain向导自动添加头文件#...

weixin_42565865的博客 166

0005-MFC--CCheckListBox控件的使用

在VS中,CCheckListBox控件无法选择,能选的只有CListBox控件,这个控件的选项前面没有checkbox,如何才能用CCheckListBox了,方法如下: 1. 新建对话框应用 2.给对话框加一个ListBox控件 3.修改ListBox的2个属性: Owner draw :Fixed, Has String:true 4. 给ListBox加一个变量 m_list,...

modabobo 308

Qt QComboBox控件下拉框中的item高度不起作用原因

注意:这一句需要放在在所在界面的构造函数里,否则不生效。

u012719076的博客 870

MFC CCheckListBox 在rMBP的vmware win7上添加行崩溃

这两天悲剧满满。。 一个一直很正常的程序,在我换了rmbp后,用vmware win7 运行竟然挂了。 本来一直是这样的: 结果它这样了: 多亏vs强大的crash stack 跟踪

wadahana的专栏 255

离散域下并网逆变器电流环参数设计和稳定性分析附带simulink模型.zip

在离散域下设计并网逆变器的电流环控制是一个复杂的过程,涉及到采样周期、数字控制器的设计、稳定性分析等多个方面。下面将详细介绍在离散域下设计并网逆变器电流环控制的方法,包括参数设计和稳定性分析。1. 离散域控制设计离散域控制设计需要考虑采样周期的影响,因为实际的数字控制系统都是在固定的间间隔内对系统状态进行采样和控制的。1.1 采样周期的选择采样周期 T 的选择非常重要,过长的采样周期会导致系统的动态性能下降,而过短的采样周期则会增加计算负担和噪声敏感度。一般情况下,采样周期应该满足香农采样定理。PID控制器的参数整定可以通过多种方法实现,常见的有:经验法:根据实际测试结果逐步调整参数。Ziegler-Nichols 法:基于系统的开环频率响应特性来整定参数。根轨迹法:利用根轨迹分析法来选择参数,确保闭环系统的稳定性。频域法:通过 Bode 图来调整参数,使得系统具有合适的相位裕度和增益裕度。3. 稳定性分析在离散域中,系统的稳定性可以通过多项手段进行分析,主要包括:3.1 Z变换将连续系统的传递函数转换为离散系统的差分方程,再通过 Z 变换得到离散

上一篇: delphi中string转array of char
下一篇: CSS简单滤镜样式达到页面全灰效果
jarraytan
博客等级 码龄22年 101粉丝 56原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值