MFC ListControl使用方法
在原来博客中有:MF CListControl 简单功能使用
推荐文章:MFC类CtrlList用法
今天又又一次来介绍点新东西:双击击listcontrol 做出响应。当然你能够做的还有非常多,比方显示点击的行列,右键点击,后面代码都有。没有截图了
主要有
1 插入数据
2 得到listctrl 中全部行的checkbox 的状态
3 得到listctrl 中全部选中行的序号
4 对数据做出双击处理与推断
1插入数据显示(參考后面代码)
2双击有数据的区域(參考后面代码)做出响应
3 响应成功提示
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIzNjU1MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
部分參考代码
头文件。
#pragma once
#include "afxcmn.h"
#include "afxwin.h" // cpagebg 对话框 class cpagebg : public CDialogEx
{
DECLARE_DYNAMIC(cpagebg) public:
cpagebg(CWnd* pParent = NULL); // 标准构造函数
virtual ~cpagebg(); // 对话框数据
enum { IDD = IDD_DIALOGBG }; protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP()
public:
CListCtrl m_BgListCtr;
void InitBgList(void);
CEdit m_dzbg1;
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnNMRClickList3(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnBnClickedCheck2();
afx_msg void OnNMDblclkList3(NMHDR *pNMHDR, LRESULT *pResult);
};
cpp文件
// cpagebg.cpp : 实现文件
// #include "stdafx.h"
#include "103srv.h"
#include "cpagebg.h"
#include "afxdialogex.h" // cpagebg 对话框 IMPLEMENT_DYNAMIC(cpagebg, CDialogEx) cpagebg::cpagebg(CWnd* pParent /*=NULL*/)
: CDialogEx(cpagebg::IDD, pParent)
{ } cpagebg::~cpagebg()
{
} void cpagebg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST3, m_BgListCtr);
DDX_Control(pDX, IDC_EDIT6, m_dzbg1);
} BEGIN_MESSAGE_MAP(cpagebg, CDialogEx)
ON_WM_TIMER()
ON_NOTIFY(NM_RCLICK, IDC_LIST3, &cpagebg::OnNMRClickList3)
ON_NOTIFY(NM_DBLCLK, IDC_LIST3, &cpagebg::OnNMDblclkList3)
END_MESSAGE_MAP() // cpagebg 消息处理程序 void cpagebg::InitBgList(void)
{
DWORD dwStyle = m_BgListCtr.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;// 选中某行使整行高亮(仅仅适用与report 风格的listctrl )
dwStyle |= LVS_EX_GRIDLINES;// 网格线(仅仅适用与report 风格的listctrl )
//dwStyle |= LVS_EX_CHECKBOXES;//item 前生成checkbox 控件
m_BgListCtr.SetExtendedStyle(dwStyle); // 设置扩展风格
dwStyle |= LVS_EX_FULLROWSELECT;// 选中某行使整行高亮(仅仅适用与report 风格的listctrl )
//设置列表控件的报表显示方式
//m_BgListCtr.ModifyStyle(LVS_ICON | LVS_SMALLICON | LVS_LIST, LVS_REPORT); //设置列表控件显示网格线
//m_BgListCtr.SetExtendedStyle(LVS_EX_GRIDLINES); //在列表控件中插入列
m_BgListCtr.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 50);
m_BgListCtr.InsertColumn(1, _T("报告"), LVCFMT_LEFT, 100);
m_BgListCtr.InsertColumn(2, _T("时间"), LVCFMT_LEFT, 200);
m_BgListCtr.InsertColumn(3, _T("时间代码"), LVCFMT_LEFT, 100);
m_BgListCtr.InsertColumn(4, _T("參数个数"), LVCFMT_LEFT, 100);
m_BgListCtr.InsertColumn(5, _T("參数值"), LVCFMT_LEFT, 150);
SetTimer(1, 1000, NULL);
SetTimer(2, 2000, NULL);
SetTimer(3, 3000, NULL);
LONG lStyle; /*m_BgListCtr.InsertItem(0, _T("1"));
m_BgListCtr.InsertItem(1, _T("2"));*/
//for (int n = 0; n < 5; n++)
//{
// CString strColumnHeading = _T("");
// //strColumnHeading.Format(_T("Column %d"), n);
// m_BgListCtr.InsertColumn(n, strColumnHeading, LVCFMT_LEFT, 100);
//} //在列表控件中插入行
for (int m = 0; m <3 ;m++ )
{
CString strItem = _T("");
strItem.Format(_T(" %d"), m);
m_BgListCtr.InsertItem(m, strItem); for (int n = 1; n < 2; n++)
{
CString strText = _T("动作报告");
//strText.Format(_T("SubItem %d %d"), m, n);
m_BgListCtr.SetItemText(m, n, strText);
}
}
} void cpagebg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此加入消息处理程序代码和/或调用默认值
CTime time = CTime::GetCurrentTime();
CString m_strTime = time.Format("%Y-%m-%d %H:%M:%S");
//AfxMessageBox(m_strTime);
AfxSetWindowText(m_dzbg1,m_strTime );
switch (nIDEvent)
{
case 1:
for (int m= 0; m<1; m++)
{
for (int n = 2; n < 3; n++)
{
m_BgListCtr.SetItemText(m, n, m_strTime);
}
}
break;
case 2:
for (int m= 1; m< 2; m++)
{
for (int n = 2; n < 3; n++)
{
m_BgListCtr.SetItemText(m, n, m_strTime);
}
}
break;
case 3:
for (int m= 2; m< 3; m++)
{
for (int n = 2; n < 3; n++)
{
m_BgListCtr.SetItemText(m, n, m_strTime);
}
}
break;
} CDialogEx::OnTimer(nIDEvent);
} void cpagebg::OnNMRClickList3(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此加入控件通知处理程序代码
//AfxMessageBox(_T("1"));
/*DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_BgListCtr.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
int nItem = m_BgListCtr.SubItemHitTest(&lvinfo);
if(nItem != -1)
{
CString strtemp;
strtemp.Format(_T(" 单击的是第%d 行第%d 列"), lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp);
} */ DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_BgListCtr.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
UINT nFlag;
int nItem = m_BgListCtr.HitTest(point, &nFlag);
// 推断是否点在checkbox 上
/*if(nFlag == LVHT_ONITEMSTATEICON)
{
AfxMessageBox(_T(" 点在listctrl 的checkbox 上"));
} */
*pResult = 0;
} void cpagebg::OnBnClickedCheck2()
{
// TODO: 在此加入控件通知处理程序代码
} //双击事件
void cpagebg::OnNMDblclkList3(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此加入控件通知处理程序代码
//AfxMessageBox(_T(" 2222"));
// ::MessageBox(NULL,_T("列表为空"),_T("标题"),MB_OK); DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_BgListCtr.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
int nItem = m_BgListCtr.SubItemHitTest(&lvinfo);
if(nItem != -1)//在有数据的显示点击有效
{
/*CString strtemp;
strtemp.Format(_T(" 单击的是第%d 行第%d 列"), lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp); */
if(::MessageBox(m_hWnd,_T("确定产生报告"),_T("确认?"),MB_OKCANCEL) == IDCANCEL)
{
AfxMessageBox(_T(" error"));
}else
{
AfxMessageBox(_T(" sucess"));
}
} *pResult = 0;
}
MFC ListControl使用方法的更多相关文章
- VS2013 MFC listcontrol 双击编辑
原文地址:http://blog.csdn.net/xianglifighter/article/details/17592209 最近在拿一些小的项目练习MFC,遇到不少问题,期中之一便是修改列表框 ...
- MFC listcontrol 分列 添加行数据 点击列头排序
适用于 对话框程序 1.在工具箱中拖出 ListControl,然后右键-属性,view-Report 让你的ListControl变成这幅模样! 2.添加ListControl控件的control类 ...
- MFC ListControl用法
http://blog.csdn.net/lovton/article/details/6527208 1.建立一个对象m_LogList 步骤:在对话listcontrol控件右键点击添加变量-&g ...
- console中应用MFC类的方法
1.添加#include <afx.h>或者<afxwin.h> 这时会报错1>c:\program files\microsoft visual studio 8\vc ...
- MFC listcontrol导出excel表格
// 导出ExcelCString CBackGroundDlg::ExportAsExcel(CString filename, CListCtrl &resultlist, CWnd * ...
- 控制台程序使用MFC类的方法
(unresolved external symbol __endthreadex解决办法) 1.新建控制台程序: 2.添加源代码如下: #include <afx.h> #include ...
- C++ 简单实现MFC ListControl 点击列头排序
说明: SetItemData可以为每一行绑定一个DWORD类型的变量.用GetItemData可以获得这个变量.举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID ...
- MFC 程序退出方法
基於對話框的: 1.PostQuitMessage(0);2.PostMessage(WM_QUIT,0,0);3.ExitProcess(0);注意使用时先释放分配的内存,以免造成内存泄露4.exi ...
- MFC ListControl技巧汇总
转自:http://hi.baidu.com/qi_xian/blog/item/1971aa22da89ada24723e856.html 以下未经说明,listctrl默认view 风格为repo ...
随机推荐
- 将页面中指定表格的数据导入到Excel中
function AutoExcel(){ var oXL = new ActiveXObject("Excel.Application"); //创建应该对象 var o ...
- iOS 推荐博客
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Franz Fang链接:http://www.zhihu.com/question/20264108/answer/3026 ...
- C#中的委托事件的分析
推荐:http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html 委托和事件在 .NET Framework 中的应用非常广泛,然而, ...
- Django关于filter和get()方法
首先引入一个问题: 问: card = Card.objects.filter(pk=offline_card_id).get() card = Card.objects.get(pk=offline ...
- 视频硬解api介绍
在一个gpu如此强大的时代,视频解码怎么能少了gpu厂商的参加.为了用硬件加速视频解码,厂商定义了一些api. 好吧,一旦和硬件打交道,就会有os的参加,有了硬件与os参加,api肯定会变成很凌乱,看 ...
- [转贴]WebService的简单实现 C++
WebService的简单实现 一.socket主机创建和使用过程 1.socket()//创建套接字 2.Setsockopt()//将套接字属性设置为允许和特定地点绑定 3.Bind()//将套接 ...
- 【HDOJ】2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
多重背包. #include <stdio.h> #include <string.h> ]; int n, m; void completePac(int p, int h) ...
- poj1286
等价类计数问题,我们就先构造置换群 显然置换分为两种类型,旋转和翻折 先考虑旋转,每旋转i格子,这个置换的循环数为gcd(i,n); (1<=i<=n) 为什么是这个范围,下篇报告再说 翻 ...
- 实验记录贴 —— 账号同步实验 RTX 和 LDAP(AD域)
目前,公司有多个系统,RTX,邮箱(MD),OA,NC. 这些系统之间,如果要实现单点登录的话,账户肯定需要同步,或者某一种映射机制. 如果所有数据都和中央账号数据库(LDAP,这里是AD域)看齐,那 ...
- Unity3D常见技术点(持续更新)
一:获取对象, 添加对象等 1:使用prefab生成对象 GameObject ballObj = GameObject.Instantiate(Resources.Load(, Quaternion ...