【VS开发】关于在CFormView中实现CListCtrl控件的注意事项

标签(空格分隔): 【VS开发】


今天调试中发现了一项非常令人恼怒的事情,本来早都知道在CFormView中没有了像在对话框中的OnInitDialog()函数用来初始化一些设置,但是可以通过实现虚函数OnInitialUpdate()函数来进行初始化,但是我忘记了一项非常重要的事情,因为我把初始化设置放在了下面的位置:

void CMyFormView::OnInitialUpdate()
{ //整行选择;有表格线;表头;单击激活
DWORD dwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE;
//报表风格;单行选择;高亮显示选择行
//视频
m_pCListCtrl.ModifyStyle(0,LVS_SINGLESEL|LVS_REPORT|LVS_SHOWSELALWAYS);
m_pCListCtrl.SetExtendedStyle(dwExStyle); m_pCListCtrl.InsertColumn(0,_T("数量"),LVCFMT_CENTER,50,0);
m_pCListCtrl.InsertColumn(1,_T("时间"),LVCFMT_CENTER,100,0);
m_pCListCtrl.InsertColumn(2,_T("类型)"),LVCFMT_CENTER,100,0);
m_pCListCtrl.InsertColumn(3,_T("长度"),LVCFMT_CENTER,100,0); CFormView::OnInitialUpdate(); }

结果很明显,发现总是曝出m_pCListCtrl是的窗口是NULL的错误,一直找不到原因所在,总之是知道控件没有创建,后来将CListCtrl控件变量操作初始化放到了一个按钮的消息响应函数下,结果还是爆出同样的错误,这让我十分恼怒【实际原因是OnInitialUpdate中的CFormView::OnInitialUpdate();代码被我注释掉了】。开始还以为在CFormView中有什么限制的呢!

经过一段时间的查询和尝试,终于让我找到了问题的所在,那就是所有后续的初始化,其实都应该放在OnInitialUpdate中的CFormView::OnInitialUpdate();代码后面,如果不调用这个CFormView::OnInitialUpdate();,估计控件都没有完成初始化设置。

所以,重新调用CFormView::OnInitialUpdate()函数之后,再测试,都能通过。所以,以后要加强牢记这种关系,另外,在学习一下一种调试方法:

我们在调用WINDOWS函数的时候,经常要在后面加一条GetLastError()来取得函数出错的错误码以及原因,如果在调试的状态中,WINAPI出错了,那我们又要停下来,加一句GetLastError(),然后再跑。这样调试起来很不方便。其实我们可以使用VC里的一些固定符号来进行调试。


下面说一下第一个@ERR,我们等函数执行完,并确定它出错了,那我们就可以在VC 的WATCH窗口里加上@ERR,那我们就马上可以看到出错的错误码了。如果我们还想知道错误码的意思,那我们可以加上@ERR,hr,这样错误码和出错信息都清清楚楚的显示出来了。


这个调试方法是不是很棒?其实这种伪符号还有一个用处,在我们调试的过程中,我们可以利用这些伪符号设置断点停止的条件。例如下面的两行代码:


FILE *fp = fopen("c:a_file_that_does_not_exist.txt", "r");
int nT = 123;

我们把断点加在第二行上,然后按CTRL+B(或者ALT+F9或者Edit->Breakpoints),选中这个断点,然后点Condition,输入@ERR==2,按下

F5来调试我们的程序,程序就会在@ERR为2的时候停在了断点上。如果我们不想它为2的时候停止,我们就输入@ERR!=2,爽吧,这种功能可以说有很多可应用的地方,具体就等各位去实战了。


除了@ERR之外,还有很多伪符号,例如@TIB,这是取得线程ID的符号,这个符号在多线程程序调试中可以发挥很大的作用。当我们有一个函数是被多个线程调用的,那当我们在这个函数里设一个断点后,无论哪个线程调用这个函数,都会停止在这个断点上。这个时候,如果我们想知道是哪个线程调用了它,我们就可以在WATCH窗口里写下@TIB,就会看到类似于2147344384这种数字了。这个就是线程ID了(也可以是这种格式:0x7ffa6000),我们同样可以在断点管理的Condition那里写上@TIB==0x7ffa6000,这样在其他线程调用这个函数时候不会停止,只有ID为0x7ffa6000的线程调用了,才会停止。


2016-5-3

张朋艺 pyzhangbit2010@126.com

【VS开发】关于在CFormView中实现CListCtrl控件的注意事项的更多相关文章

  1. WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

    本文转载:http://www.cnblogs.com/umplatform/archive/2012/08/29/2660240.html 在B/S开发中,对TreeView控件要改变当前选中节点的 ...

  2. Android开发中目前流行控件和知识点总结

    Android开发中目前流行控件和知识点总结   1.SlidingMenu 滑动菜单 应用案例:Facebook . Path 2.0 .人人.网易新闻 下载地址: https://github.c ...

  3. EBS OAF 开发中的OAMessageRadioGroup控件

    EBS OAF 开发中的OAMessageRadioGroup控件 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 简单介绍 RadioGro ...

  4. CListCtrl控件中显示进度条

    CListCtrl控件的subitem中显示进度条 http://www.codeproject.com/Articles/6813/List-Control-Extended-for-Progres ...

  5. ios开发中关闭textview控件的虚拟键盘

    在ios开发中,textfield控件在点击的时候出现虚拟键盘,关掉虚拟键盘可以通过虚拟键盘中的done button和点击view中的任意地方来关闭虚拟键盘. 1.第一种方法是textfield控件 ...

  6. 【VS开发】CListCtrl控件使用方法总结

    CListCtrl控件使用方法总结 今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类 ...

  7. HTML5 Web app开发工具Kendo UI Web中Grid网格控件的使用

    Kendo UI Web中的Grid控件不仅可以显示数据,并对数据提供了丰富的支持,包括分页.排序.分组.选择等,同时还有着大量的配置选项.使用Kendo DataSource组件,可以绑定到本地的J ...

  8. C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变(转)

    在设计可供用户调整大小的窗体时,如何实现该窗体上的控件也应能正确地随窗体的改变而自动调整大小并且能重新定位?此时就要借助控件的.Anchor属性.Anchor属性定义控件的定位点位置.当控件锚定到某个 ...

  9. MFC实现 自适应操作系统的CListCtrl控件

    新建对话框应用程序,删除自动生成的控件后,拖拽一个CListCtrl控件,绑定变量名为:m_listctrl.在对话框初始化成员函数OnInitDialog()中键入以下代码即可实现自适应系统的CLi ...

随机推荐

  1. django设置debug设为False,前端样式出现错乱或静态文件404问题。

    部署到生产环境中遇到的坑大部分都是引用静态文件带来的, setting设置里面debug设为False, 需要设置ALLOWED_HOSTS=["服务器ip"],不然运行不了的. ...

  2. 【LuoguP4482】[BJWC2018]Border 的四种求法

    题目链接 题意 区间 boder \(n,q\leq 2*10^5\) Sol (暴力哈希/SA可以水过) 字符串区间询问问题,考虑用 \(SAM\) 解决. boder相当于是询问区间 \([l,r ...

  3. JSP大文件分片上传

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  4. 关于 ESIM 网络的 资料 集合

    1.https://blog.csdn.net/wcy23580/article/details/84990923 原理及Python keras 实现 2.https://www.kaggle.co ...

  5. Linux之GDB命令(二)

    gdb命令: 前提条件:可执行文件必须包含调试信息 gcc -g gdb 文件名 –启动gdb调试 查看代码命令   当前文件:     list 行号(函数名)   指定文件:     list 文 ...

  6. 第三方库requests详解

    Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...

  7. ACM之路(16)—— 数位DP

    题目就是kuangbin的数位DP. 先讲C题,不要62,差不多就是一个模板题.要注意的是按位来的话,光一个pos是不够的,还需要一维来记录当前位置是什么数字,这样才能防止同一个pos不同数字的dp值 ...

  8. 微信公众号【黄小斜】和【Java技术江湖】

  9. Kafka 概述

    Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域. Kafka 中,客户端和服务器之间的通信是通过 TCP 协议完成的. 一.传统消息 ...

  10. 【MyBatis】【SQL】没有最快,只有更快,从一千万条记录中删除八百万条仅用1分9秒

    这次直接使用delete from emp where cdate<'2018-02-02',看看究竟会发生什么. Mapper里写好SQL: <?xml version="1. ...