【2016.3.30项目技术记录】]VS2010自动生成MFC单文档框架程序的修改:去除属性框,在CViewTree类中添加鼠标单击响应
转自http://blog.csdn.net/yanfeiouc2009/archive/2010/06/07/5653360.aspx
手头上有个东西要用到单文档,由于想省事,直接用VS2010做了。刚生成的代码直接编译后会有Output、Property、Workspace和我们主程序的CxxView窗口。并且在WorkSpace窗口中添加了了树控件,在Workspace窗口中预添加了两个属性页(类视图和文件视图)。感觉ms做的比较周到,但我不需要这么多窗口,只好把某些窗口注释掉。
1、去掉窗口(使用)。在“MainFrm.h”中找到相应窗口对象的定义,将他们注释掉,注释后的Output 和 Property 窗口的定义如下:
..........
// COutputWnd m_wndOutput; //去掉输出窗口, 2010.06.07
// CPropertiesWnd m_wndProperties;//去掉属性窗口, 2010.06.07
..........
然后再通过搜索,将所有含有 m_wndOutput 和 m_wndProperties 的代码段注释掉:
“MainFrm.cpp”中
..........
//去掉输出窗口, 2010.06.07
//去掉属性窗口, 2010.06.07
..............
//去掉输出窗口, 2010.06.07
//去掉属性窗口, 2010.06.07
..........
//去掉输出窗口, 2010.06.07
//去掉属性窗口, 2010.06.07
...............
// m_wndOutput.UpdateFonts();//去掉输出窗口, 2010.06.07
...............
将上述代码注释掉后再运行,就会发现单文档中没有了输出窗口和属性窗口。
2、修改Workspace窗口。
1)修改属性页名字。由于预生成的两个属性页的名字是以字符串资源形式存在工程中的,因此只需将相应资源改为我们想用的名字即可。
在资源窗口中,打开String table 选项,将相应的“类视图”和“文件视图”对应的字符串资源修改为我们想要的字符串即可。
2)修改树控件。vs2010为我们预添加了许多“树项”,我们需要将其注释掉或修改为自己的项名。
要注释掉的代码在ClassView.cpp中:
void CClassView::FillClassView()
{
HTREEITEM hRoot = m_wndClassView.InsertItem(_T("控制器"), 0, 0);//要保留的我定义的一个树项
m_wndClassView.SetItemState(hRoot, TVIS_BOLD, TVIS_BOLD);
}
3)使树项响应鼠标单击事件。直接生成的树控件中仅能实现鼠标单击选中、打开、折叠树项的功能,而不受我们的控制,我尝试在CTreeView中添加WM_LBUTTONDOWN消息,发现只能响应树中空白处的单击,而一旦单击了某项就没有反应。因此我在NM_CLICK消息中添加了如下代码,终于实现了控制树控件中鼠标单击事件响应的目的。以下是单击后改变项的名称的例子:
void CViewTree::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
//测试
//AfxMessageBox(_T("CViewTree::OnLButtonUp"));
// 获取当前选择的项
CTreeCtrl* pTreeCtrl = this;
CPoint ptCurSel(0,0);
TVHITTESTINFO HitTestInfo;
// 通过鼠标在客户区中的位置
GetCursorPos(&ptCurSel);
pTreeCtrl->ScreenToClient(&ptCurSel);
// 获取当前选择的是哪一项
HitTestInfo.pt = ptCurSel;
HTREEITEM hSelect = pTreeCtrl->HitTest(&HitTestInfo);
if(hSelect != NULL)
{
CString strItem = pTreeCtrl->GetItemText(hSelect);
::AfxMessageBox( strItem);
}
// 设置该项为选中状态
pTreeCtrl->SelectItem(hSelect);
//以下方法获取的是上一次处于选中状态的项首先将点击的对象选中
CTreeCtrl* pTreeCtrl = this;
HTREEITEM hSelect = pTreeCtrl->GetSelectedItem();
HTREEITEM hLight = pTreeCtrl->GetDropHilightItem();
if((hLight != NULL) && (hSelect != hLight))
hSelect = hLight;
if(hSelect == NULL)
return;
pTreeCtrl->SelectItem(hSelect);
//编辑当前选中对象名称
pTreeCtrl->EditLabel(hSelect);
if( NULL != hSelect )
{
CString strItem = pTreeCtrl->GetItemText(hSelect);
if(strItem == _T("控制器"));
{
pTreeCtrl->SetItemText(hSelect, _T("改变后的控制器"));
}
::AfxMessageBox( strItem);
}
*pResult = 0;
}
【2016.3.30项目技术记录】]VS2010自动生成MFC单文档框架程序的修改:去除属性框,在CViewTree类中添加鼠标单击响应的更多相关文章
- MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误
今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc.CFileView等类,一进去就编译运行(就是最初自动生成的项目 ...
- VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)
VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)-软件开发-鸡啄米 http://www.jizhuomi.com/software/141.html 上一讲中讲了VS20 ...
- 使用jsdoc-toolkit来自动生成js api文档
近来前端组小盆友开发的类库越来越多,很多情况下彼此不知道写了些什么方法,为了更好的合作提高工作效率,找了个比较好的api文档生成方法.使用jsdoc-toolkit来自动生成js api文档. 一. ...
- Go学习笔记(六) | 使用swaggo自动生成Restful API文档(转)
关于Swaggo 或许你使用过Swagger, 而 swaggo就是代替了你手动编写yaml的部分.只要通过一个命令就可以将注释转换成文档,这让我们可以更加专注于代码. 目前swaggo主要实现了sw ...
- Golang使用swaggo自动生成Restful API文档
#关于Swaggo 相信很多程序猿和我一样不喜欢写API文档.写代码多舒服,写文档不仅要花费大量的时间,有时候还不能做到面面具全.但API文档是必不可少的,相信其重要性就不用我说了,一份含糊的文档甚至 ...
- Spring MVC学习总结(9)——Spring MVC整合swagger自动生成api接口文档
Swagger 号称:世界最流行的API框架,官网:http://swagger.io/,Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总 ...
- C# 自动生成代码API文档
暂时没学会正规的转载style临时记录一下 NET中的规范标准注释(一) -- XML注释标签讲解 http://www.cnblogs.com/mq0036/p/3544264.html NET中的 ...
- 插件式WebApi服务及自动生成Api帮助文档
上一篇博客中,讲到了将WebApi Host到控制台和IIS,本篇总结一下如何将WebApi的Service以插件的形式进行动态部署,并设置Hoster的首页显示Api帮助文档,当然,也包括动态部署进 ...
- 利用ShowDoc自动生成api接口文档
最近在做新项目,感觉写完一个接口 还要去再写一遍api文档 挺浪费时间的,所以借用ShowDoc的api开放功能 自动生成api文档. 首先 去 https://www.showdoc.cc/ 注册一 ...
随机推荐
- SQL Server更新表(用一张表的数据更新另一张表的数据)
a) 写法轻松,更新效率高: update table1 set field1=table2.field1,field2=table2.field2 from table2 where table1. ...
- Camstar Portal modeling user guid --设置本地时间
登陆--studio --portal settings -- timezone settings 里面有EST 和EDT两个时间. 现在要设置为北京时间(08:00) 原文: Localizatio ...
- selenium—八种定位方法
find_element_by_id() find_element_by_name() find_element_by_class_name() find_element_by_tag_name() ...
- linux命令(5):rm 命令
linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有 ...
- iOS中线程同步基本详解
为什么使用线程同步技术:多个线程是同时执行的 如果多个线程同时操作一个资源 会造成此资源的数据错乱 线程同步简介 线程同步,多条线程按顺序地访问某个资源 注意:此处的同步不是一起执行的意思 是一个一个 ...
- 用css伪类制作三角形的三种方法
在手机上写三角形的时候,我一般都用伪类,刚开始的时候用的图片,但是在现在的手机高清屏幕上,图片容易失真,还是用伪类吧! 第一种:一个90度的“ > ”, 只有线条.(可以做下拉框的箭头之类的) ...
- flask文件的上传和下载
from werkzeug.utils import secure_filename from flask import Flask,render_template,jsonify,request i ...
- 使用visio 2007对现有的数据库进行反向工程
假如你有一个数据库并且想对这个数据库进行ER图的描绘:又或者你想绘制一个ER图,但发觉绘制效率太低,对visio不熟悉,而你对数据库的操作却了如指掌.这时候你可以利用Visio的反向工程对已有的数据库 ...
- JavaWeb 学习005-4个页面,5条sql语句(添加、查看、修改、删除)
今天完成了的事: = 1.班级模块,list页面的添加班级信息操作,中文乱码问题 尚待解决 这俩天做得工作是: 首先搭建好main页面:是由top.left.right三个部分构成的,拼接到一起. 流 ...
- Python:线程
Python中创建线程有两种方式:函数或者用类来创建线程对象. 函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程. 类:创建threading.Thread的 ...