【VS开发】list控件的InsertColumn方法出错
今天在写一个获取磁盘信息的小程序,通过list控件显示各磁盘信息。我在属性页(CPropertyPage)的构造函数中,调用list控件的InsertColumn方法,编译链接都通过了,但运行时冒出了一个Debug Assertion Failed!提示

我就改用调试方式运行,再弹出该对话框时,选择重试,最后程序中断指向了
_AFXCMN_INLINE int CListCtrl::InsertColumn(int nCol, const LVCOLUMN* pColumn)
{ ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, LVM_INSERTCOLUMN, nCol, (LPARAM)pColumn); }
其中,m_hWnd为0x00000000
监视(watch)窗口的 @err,hr(即,GetLastError)为
@err,hr 0x00000578 无效的窗口句柄。 unsigned long
起初,我没在意m_hWnd和@err,hr的值,只是看到出错点是CListCtrl::InsertColumn就上网查。不过网上有关调用CListCtrl::InsertColumn出错的文章很少!但有个帖子模模糊糊提到了可能是窗体类还没创建引起的错误。后来我再用调试运行执行程序,执行来到刚刚出错的地方,发现SendMessage的m_hWnd为0x00000000,说明此时list控件还没有创建。
我是在属性页(CPropertyPage)的构造函数中调用InsertColumn的,CPropertyPage为窗体,继承于CDialog。程序执行到CPropertyPage构造函数时,属性页还没创建完成,其中的控件也还没创建完成,在调用InsertColumn时,向list控件发送一个LVM_INSERTCOLUMN消息,但由于list控件还没有创建,才会引起无效的窗口句柄错误!将InsertColumn方法放在CPropertyPage::OnInitDialog()中调用,问题就解决了!
要是刚开始我注意了m_hWnd或 @err,hr的值,问题很快就能解决!看来要好好改改思维习惯了
@err,hr是我从《Windows核心编程》学到的一个技巧,它的功能等同于GetLastError,但使用起来比GetLastError方便多了!只要程序调试时在监视(watch)窗口,加上一项@err,hr,就能查看到每一步调试运行时的Error Code,并且有对Error Code的文本描述。而不需要在程序中加入GetLastError代码来获取Error Code,再用Error Lookup工具将Error Code转换成相应的文本描述!不过@err,hr不是每个IDE都支持的,我试过vc++6.0
sp6用不了,vs2005就可以!
【VS开发】list控件的InsertColumn方法出错的更多相关文章
- monkeyrunner之坐标或控件ID获取方法(六)
Monkeyrunner的环境已经搭建完成,现在对Monkeyrunner做一个简介. Monkeyrunner工具提供了一套API让用户/测试人员来调用,调用这些api可以控制一个Android设备 ...
- 用C#开发ActiveX控件,并使用web调用
入职差不多两个月了,由学生慢慢向职场人做转变,也慢慢的积累知识,不断的更新自己.最近的一个项目里边,涉及到的一些问题,因为SDK提供的只是winform才能使用了,但是有需求咱们必须得完成啊,所以涉及 ...
- 使用C#开发ActiveX控件(新)
前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...
- [转]C#开发ActiveX控件,.NET开发OCX控件案例
引自:百度 http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么 ...
- 使用C#开发ActiveX控件(新) 转 http://www.cnblogs.com/yilin/p/csharp-activex.html
前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...
- [转] 使用C#开发ActiveX控件
双魂人生 原文 使用C#开发ActiveX控件 ActiveX 是一个开放的集成平台,为开发人员.用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内 ...
- 【转】带checkbox的ListView实现(二)——自定义Checkable控件的实现方法
原文网址:http://blog.csdn.net/harvic880925/article/details/40475367 前言:前一篇文章给大家展示了传统的Listview的写法,但有的时候我们 ...
- 使用C#开发ActiveX控件 11
C#开发ActiveX控件 ActiveX 是一个开放的集成平台,为开发人员.用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法. 使用 ...
- C#开发ActiveX控件
昨天写了篇博客<Winform 程序嵌入WPF程序 并发送消息>,没有说明为什么要嵌入WPF程序,那么今天就来唠叨唠叨其中的一个使用场景,开发ActiveX控件 首先,新建一个类库工程Hu ...
随机推荐
- 洛谷P1020 导弹拦截【单调栈】
题目:https://www.luogu.org/problemnew/show/P1020 题意: 给定一些导弹的高度. 一个导弹系统只能拦截高度不增的一系列导弹,问如果只有一个系统最多能拦截多少导 ...
- Educational Codeforces Round 73 (Rated for Div. 2) A. 2048 Game
链接: https://codeforces.com/contest/1221/problem/A 题意: You are playing a variation of game 2048. Init ...
- javascript内置对象一:String
<script> //string.split("-"),以字符"-"把string拆分成一个数组.返回一个数组 //array.joi ...
- JS栈内存与堆内存
㈠JavaScript变量 ⒈分类 ⑴JavaScript中的变量分为基本类型和引用类型. ⑵基本类型就是保存在栈内存中的简单数据段. ⑶引用类型指的是那些保存在堆内存中的对象. ⒉基本类型 基本类 ...
- ubuntu16.0.4 设置静态ip地址
由于Ubuntu重启之后,ip很容易改变,可以用以下方式固定ip地址 1.设置ip地址 vi /etc/network/interface # The loopback network interfa ...
- 阿里云Ubuntu安装LNMP环境之Nginx
在QQ群很多朋友问阿里云服务器怎么安装LNMP环境,怎么把项目放到服务器上面去,在这里,我就从头开始教大家怎么在阿里云服务器安装LNMP环境. 在这之前,我们先要知道什么是LNMP. L: 表示的是L ...
- centos与debian网卡
debian /etc/network/interfaces # This file describes the network interfaces available on your sys ...
- Docker小记
1.Docker的安装 这里给一个比较通用的教程 Ubuntu 14.04 16.04 (使用apt-get进行安装) # step : 安装必要的一些系统工具 sudo apt-get update ...
- JS基础_数组简介
内建对象 宿主对象 自定义对象 数组(Array) - 数组也是一个对象 - 它和我们普通的对象功能类似,也是用来存储一些值的 - 不同的是普通对象是使用字符串作为属性名的 数组是使用数字来作为索引来 ...
- Nginx之搭建反向代理实现tomcat分布式集群
参考博文: Nginx反向代理实现Tomcat分布式集群 1. jdk 安装 jdk 下载网址: http://www.oracle.com/technetwork/java/javase/downl ...