博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
颜色控件【MFC】自己写一个ListCtrl控件(实现栅格属性表的编辑)-java教程
阅读量:5759 次
发布时间:2019-06-18

本文共 2630 字,大约阅读时间需要 8 分钟。

在写这篇文章之前,xxx已经写过了几篇关于改颜色控件主题的文章,想要了解的朋友可以去翻一下之前的文章

 

    栅格数据有属性表和颜色表,属性表述描了素像值和该值代表的容内,同时对应颜色表,表示某一个值对应的颜色(如下图1)。ArcGIS中供提了对属性表和对应颜色辑编的能功(如下图2)。

    

 

    我们软件用MFC发开的,现发ListCtrl控件其实不好用,网上有很多重写的demo,没有找到适合的,于是按照能功自己从新写了一个。

    之前没自己写过控件,得觉很庞杂。。。

    主要是现实某一列单元格可辑编,网上看了一下,路思是双击那一列的时候,涌现一个EditCtrl控件,输入值,按了enter键后,把EditCtrl控件的值存保到listctrl那一列中。

    面下就是双击后,生成edit控件,然后再双击的地方涌现,觉感就好像单元格可辑编一样。

void CEditListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point){	LVHITTESTINFO hi;	hi.pt = point;	int n = SubItemHitTest(&hi);	if(n != -1)	{		// 不辑编1/2/3列		if(hi.iSubItem == 1 || hi.iSubItem == 2 || hi.iSubItem == 0)		{			CListCtrl::OnLButtonDblClk(nFlags, point);			return;		}		m_nRow = hi.iItem;   //行		m_nCol = hi.iSubItem;   //列		if(m_EditItem.m_hWnd == NULL)		{			RECT rect;     //edit控件巨细			CRect cRect;   //单元格的区域   			rect.left = rect.top = 0;			rect.bottom = 20;			rect.right = 100;			m_EditItem.Create(WS_CHILD | ES_LEFT| ES_AUTOHSCROLL | ES_WANTRETURN | ES_MULTILINE, rect, this, 0x01);			m_EditItem.SetFont(this->GetFont(), FALSE);			GetSubItemRect(hi.iItem, hi.iSubItem, LVIR_BOUNDS, cRect);			m_EditItem.SetWindowText(this->GetItemText(hi.iItem, hi.iSubItem));			m_EditItem.MoveWindow(&cRect, TRUE);			m_EditItem.SetFocus();			m_EditItem.ShowWindow(SW_SHOW);		}	}}
    每日一道理
喜马拉雅直冲霄汉,可下面有攀爬者的旗帜;撒哈拉沙漠一望无垠,可里面有跋涉者的脚印;阿尔卑斯山壁立千仞,可其中有探险者的身影;雅鲁藏布江湍急浩荡,可其中有勇敢者的故事。

    

相响应一下enter事件,重写PreTranslateMessage(MSG* pMsg)函数,然后存保edit框中的数据,

void CEditListCtrl::SetColumnText(){	m_EditItem.ShowWindow(SW_HIDE);	if(m_nRow != -1)	{		CString ItemText;		m_EditItem.GetWindowText(ItemText);		this->SetItemText(m_nRow, m_nCol, ItemText);	}	m_nCol = m_nRow = -1;}

    

下面就现实了可辑编的作操;

    面下是属性对应颜色,把颜色表现在单元格中,本来想改修颜色的,得觉太庞杂了,改颜色就用了来原的按钮能功。

    单元格的颜色还是重写了OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult)函数

else if((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )    	{		int nItem=static_cast
(pLVCD->nmcd.dwItemSpec ); long col = this->GetItemData(nItem); switch(pLVCD->iSubItem) { case 0: pLVCD->clrTextBk = col; break; default: pLVCD->clrTextBk = RGB(255,255,255); break; } //续继 *pResult = CDRF_DODEFAULT; }

    

因为颜色值是存保在响应行的数据中,通过setItemData和GetItemData存保和获得。所以上述便可以对每一行第一列的单元格赋值了。

 

    最后效果图如下:

    

 

 

 

 

文章结束给大家分享下程序员的一些笑话语录: 一个程序员对自己的未来很迷茫,于是去问上帝。

"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的"
于是他去问Lippman。
Lippman说"程序员的未来就是驾驭程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的"
于是他去问Gates。
Gates说"程序员的未来就是榨取程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的"
于是他去问侯捷。
侯捷说"程序员的未来就是诱惑程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝摇摇头"唉,我的孩子,你还是别当程序员了")

转载地址:http://eplkx.baihongyu.com/

你可能感兴趣的文章
树莓派下实现ngrok自启动
查看>>
javascript静态类型检测工具—Flow
查看>>
MachineLearning-Sklearn——环境搭建
查看>>
node学习之路(二)—— Node.js 连接 MongoDB
查看>>
Goroutine是如何工作的?
查看>>
《深入理解java虚拟机》学习笔记系列——垃圾收集器&内存分配策略
查看>>
TriggerMesh开源用于多云环境的Knative Event Sources
查看>>
GitLab联合DigitalOcean为开源社区提供GitLab CI免费托管
查看>>
通过XAML Islands使Windows桌面应用程序现代化
查看>>
区块链现状:从谨慎和批判性思维看待它(第二部分)
查看>>
苹果公司透露Siri新发音引擎的内部原理
查看>>
GCM 3.0采用类似方式向Android、iOS和Chrome发送消息
查看>>
如何成为一家敏捷银行
查看>>
Oracle在JavaOne上宣布Java EE 8将会延期至2017年底
查看>>
Javascript 深入浅出原型
查看>>
简单之极,搭建属于自己的Data Mining环境(Spark版本)
查看>>
Ruby 2.5.0概览
查看>>
如何通过解决精益问题提高敏捷团队生产力
查看>>
Comment2Wechat —— Typecho 插件
查看>>
Apache下.htaccess文件配置及功能介绍
查看>>