mfc-MFC CListCtrl类checkbox问题

问题描述

MFC CListCtrl类checkbox问题

MFC项目用到CListCtrl控件,CListCtrl控件的view设置为list,而且style含有LVS_EX_CHECKBOXES,即每一行最前面都有一个checkbox,那么问题来了,我在勾选和取消checkbox时,怎么捕获checkbox的change消息

解决方案


void CStatusBarDlg::OnClickStateList(NMHDR* pNMHDR, LRESULT* pResult)
{
    DWORD dwPos = GetMessagePos();
    CPoint point( LOWORD(dwPos), HIWORD(dwPos) );  

    m_StatusList.ScreenToClient(&point);  

    LVHITTESTINFO lvinfo;
    lvinfo.pt = point;
    lvinfo.flags = LVHT_ABOVE;  

    UINT nFlag;
    int nItem = m_StatusList.HitTest(point, &nFlag);
    //判断是否点在checkbox上
    if(nFlag == LVHT_ONITEMSTATEICON)
    {
        TRACE("You click CheckBox,Item will be Clicked!");
        }
    *pResult = 0;
}

解决方案二:

响应LVN_ITEMCHANGED这个消息,下面是一段示例代码

LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
*pResult = 0;
CManageBillDoc *pDoc = GetDocument();
POSITION pos = m_DataList.GetFirstSelectedItemPosition();
while(pos)
{
int nItem = m_DataList.GetNextSelectedItem(pos);
pDoc->m_nSelectItemID = (long)m_DataList.GetItemData(nItem);

}

if(pNMLV->uOldState == 0 && pNMLV->uNewState == 0)//行CheckBox状态没有变化
{
    return;
}

//原始状态
BOOL bPrevState = (BOOL)(((pNMLV->uOldState & LVIS_STATEIMAGEMASK) >> 12) - 1);
if(bPrevState < 0)//控件刚刚创建,没有原始状态
{
    bPrevState = 0;//就可以认为本项原始状态是未选中的状态
}

//新状态
BOOL bNewState = (BOOL)(((pNMLV->uNewState & LVIS_STATEIMAGEMASK) >> 12) - 1);
if(bNewState < 0)//没有LVS_EX_CHECKBOX状态的ListCtrl
{
    bNewState = 0;
}

if(bNewState == bPrevState)//checkbox状态没有改变
    return;
else if(bNewState)
{
    //........
}
时间: 2024-09-17 03:47:37

mfc-MFC CListCtrl类checkbox问题的相关文章

使用MFC的数组类

MFC的数组类支持的数组类似于C++中的常规数组,可以存放任何数据类型.C++的常规数组在使用前必须将其定义成能够容纳所有可能需要的元素,而MFC数组类创建的对象可以根据需要动态地增大或减小,数组的起始下标是0,而上限可以是固定的,也可以随着元素的增加而增加,数组在内存中的地址仍然是连续分配的. MFC定义了数组模板类CArray,并针对各种常用变量类型定义了CByteArray,CWordArray,CUIntArray,CDWordArray,CStringArray,CObArray,CP

mfc-单文档 MFC 按钮 view类

问题描述 单文档 MFC 按钮 view类 单文档程序,在一个对话框(类名字为wer)里添加一个按钮,现在想通过点击该按钮调用VIEW里面的函数?请问该怎么操作? 解决方案 按钮中获取View对应的指针,然后调用函数.GetActiveView()

visual studio 2010-VS2010 MFC一个自定义类如何调用一个对话框类中的成员变量

问题描述 VS2010 MFC一个自定义类如何调用一个对话框类中的成员变量 我从一个对话框定义了几个CString类型的edit控件,我现在写一个类想调用该对话框中的创建的edit控件变量.怎么办啊 解决方案 字符串: getdlgitem(id)->getwindowtext() 数字 getdlgitemid(id) 解决方案二: 把那个对话框的CString变量变成public的,然后就可以直接用了,当然你需要先知道你那个对话框的指针. 解决方案三: 黑马程序员---定义一个包含私有成员变

c++-基于mfc的选址类问题数据结构课设

问题描述 基于mfc的选址类问题数据结构课设 我是一名大三生,学的软件工程,数据结构课设要求用mfc做学校超市选址,有没有哪个朋友看到过基于mfc的选址类问题,不管是什么选址都行,看到过的联系我一下,真诚感谢! 解决方案 http://wenku.baidu.com/link?url=3cLSkxSmo8dQUKSDBhlgg5bOvWG2BKZZ31K8shLzVdO9nkNI8PO64CDdW5HRo-82tWE7vOPCuP4GpqGEiKxwo3_9Uf_mjghBKoRnWHRwy6q

mfc-关于MFC自动缩放类代码的使用

问题描述 关于MFC自动缩放类代码的使用 关于MFC自动缩放类代码的使用,使用这个代码,头文件需要插入哪个目录,在主程序里怎么调用? 解决方案 你的"MFC自动缩放类代码"是哪里的代码,请贴出来. 解决方案二: 可以放到和dlg同级的目录,然后添加到你的工程中,之后在dlg的类中就可以用#incldue来引入对应的头文件来使用里面写的东西了 解决方案三: 没用使用方法的代码参考吗.

对象-请教一个MFC另外一个类返回字符函数的问题

问题描述 请教一个MFC另外一个类返回字符函数的问题 创建了一个新类,如果调用这个新类的成员变量的话,直接把新类对象实例化,然后新类.m_str ,这样调用不就行了吗?为什么我看别人写的代码,还要在新类的头文件定义几个 字符串CSTRING函数,用这个函数返回成员变量的值,请问下这样不是多此一举吗?跟 我用的方法有什么区别呢? 解决方案 通过函数返回成员变量值的目的是隐藏类实现的细节,这也是面向对象的特点. 解决方案二: 不要直接返回栈上的局部变量,因为堆栈会在函数返回后销毁. 解决方案三: 如

在非MFC工程中,如何使用MFC的CString类?

问题描述 在非MFC工程中,如何使用MFC的CString类? 解决方案 解决方案二:摘的:转非MFC工程使用CString2011-05-1316:10187人阅读评论(0)收藏举报在VS2008下如果建非MFC工程而又使用CString会出现如下错误:1.errorC2065:"CString":未声明的标识符解决方法:将#include<afx.h>添加在程序开始处,或将其放在stdafx.h预编译头中.2.再编译提示:fatalerrorC1189:#error:B

界面设计-MFC的CListCtrl怎么换风格?

问题描述 MFC的CListCtrl怎么换风格? 由于我上传不了图,所以引用 开源中国 地址:http://www.oschina.net/question/2301545_2135068 解决方案 回答过你了 http://www.codeproject.com/Articles/18910/Adding-or-Retrofitting-Aero-Glass-into-Legacy-Windhttp://www.codeproject.com/Articles/21205/Unusual-bu

修改一个完全颜色的CListCtrl类

在使用CListCtrl控件的过程中,我们会发现使用及其不方便,特别是在使用"report"显示模式时, 想给指定条目添加背景颜色,CListCtrl控件所提供的设置颜色函数只能使得控件的界面变得好看一些,根本不能满足我们的要求,我们无法把特定的一项或几项添加上不同的颜色以示区别. 幸运的是很多VC的使用者在改造CListCtrl类,使之更加功能强大上做了很多工作,开发出了各种各样的继承类来实现这个功能,Sven Freitag 就是其中的一员.他开发出了CListCtrl的继承类CC