在CodeBlocks中完美使用WTL进行开发
WTL 是 Windows Template Library 的缩写,WTL 功能不如MFC完善,但是比 MFC 更小巧,不依赖 MFC 的DLL。就是因为WTL可以编写出小巧的,不需要额外的DLL支持的程序,所以我经常会使用它来时行开发。以前一直使用VC 6.0与WTL这一组合进行开发,但是现在系统升级到了WIN10后,VC 6已经彻底不能使用了,只能使用虚拟机安装VC6进行开发,非常不方便。
这些日子,接触了免费开源的CodeBlocks集成开发环境,总体来说非常不错,经过几天的倒腾后,终于在CodeBlocks中完成了整个WTL开发环境的设置,再也用不着虚拟机了。以下是整个环境的配置过程:
一、需要使用到的软件:
1.CodeBlocks 16.01,在官方网站http://www.codeblocks.org/下载,建议下载其中的codeblocks-16.01mingw-nosetup.zip,已经含MinGW编译器。
2.VC++ 6.0,可以下载一个绿色版,因为只需要用到其中的cl编译器,link链接器等,所以不需要完整的安装版。
3.WinDbg,这个主要用到其中的cdb.exe文件,用于进行调试的支持。
4.ResEdit,因为CodeBlocks中不支持.rc的资源文件的编辑,所以需要这个资源编辑器,方便对话框等资源的编辑。
5.VisualFC这是WTL的开发插件,可以提供一个WTL、WINX的可视化开发功能,下面网盘中提供的版本已经是CodeBlocks的专用版本(由VisualFC 0.8RC2与VFCTools4CB组合而成)。
6.WTL91_5321_Final,这是WTL最新的版本。
以上文件,一部分可以到我的网盘中下载: http://pan.baidu.com/s/1dF82kpj 密码: n123
二、安装各软件到指定的文件夹中,为了使用方便,以下过程中尽可能使用相对文件夹,以后就可以形成绿色版,任意放置不同文件夹中也能正常使用。
1.解压CodeBlocks到D盘,为了方便改文件夹名为CodeBlocks,然后在创建一个子文件夹Tools,用于VisualFC与ResEdit。
2.下载网盘中的VisualFC.7z,解压到Tools/VisualFC中,下载ResEdit.7z后,解压到Tools/ResEdit中。
3.在CodeBlocks中创建文件夹VC6,用于存放VC6中的编译器以及其它一些文件。
4.将下载到的VC++ 6.0绿色版中的VC98文件夹下的所有内容都解压到VC6文件夹中,然后将VC++6.0绿色版中的Common\MSDev98\Bin下的RC开头的4个文件以及mspdb60.dll,也解压到VC6下的Bin文件夹中(这5个文件是编译.rc资源文件必须使用的)。
5.在CodeBlocks中创建文件夹WTL,然后将WTL91_5321_Final.7z中的文件都解压到WTL文件夹中。
6.安装WinDbg,然后将文件夹中的cdb.exe复制到VC6\Bin文件夹中。
安装以上步骤后,文件夹的结构应该如图所示:
三、在CodeBlocks中配置VC++6.0的编译器。
$(CODEBLOCKS)\WTL\Include
$(CODEBLOCKS)\VC6\Include
$(CODEBLOCKS)\VC6\ATL\Include
$(CODEBLOCKS)\VC6\MFC\Include
$(CODEBLOCKS)\VC6\Lib
$(CODEBLOCKS)\VC6\MFC\Lib
$(CODEBLOCKS)\WTL\Include
$(CODEBLOCKS)\VC6\Include
$(CODEBLOCKS)\VC6\ATL\Include
$(CODEBLOCKS)\VC6\MFC\Include
$(CODEBLOCKS)\VC6\Bin
如果上图中编译线程超过1,编译时会出现 fatal error C1033:cannot open program database ".....vc60.idb"这样的错误提示。
经过以上设置,VC++ 6.0的编译器已经成功加入,可以在CodeBlocks中支持MFC与WTL程序的编译。如果你需要加入Platform SDK的支持,只需要将Platform SDK中的include与Lib文件夹,放入CodeBlocks中,然后在上面的搜索中加入就可以了。
选择菜单中的导入 Visual C++ project后,找到.dsp文件就可以成功导入,然后选择使用Microsoft Visual C++ 6.0编译器,就可以开始编译了。
四、配置VisualFC这个WTL的利器,方便我们进行WTL的可视化编程。
1.配置VisualFC工具 Code::Blocks->Tools->Configure Tools->Add
Name: VFCTools
Executable: $(CODEBLOCKS)\Tools\VisualFC\bin\VFCTools.exe
Parameters: ${PROJECT_DIR}${PROJECT_FILENAME}
2.配置WTL应用程序向导 Code::Blocks->Tools->Configure Tools->Add
Name: WTLAppWizard
Executable: $(CODEBLOCKS)\Tools\VisualFC\bin\AppWizard.exe
3.测试WTLAppWizard,选择菜单"Tools---WTLAppWizard“,进入AppWizard后,选择ATL/WTL Application Wizard,进入向导模式,其中在选择WINVER时,如果没有安装Platform SDK,就不能选择WINVER=0x0500及以上选项,否则编译会出错。
3.通过菜单"File---Import project---MS Visual C++ project"后,选择刚刚生成的工程文件的 .dsp文件,在"Compiler selection“对话框中,选择Microsoft Visual C++ 6.0编译器,然后在下一步中直接点击"OK"按钮,可以导入Win32 Release与Win32 Debug的编译配置。项目默认会选中“Win32Release"。
4.开始尝试编译后,会出现以下错误。
解决办法有2种:第一种是打开stdafx.cpp后,找到上面3行内容,删除或注释掉,然后就可以通过编译了。
第二种是打开菜单"Project---Build Options..."后,在编译选项中,删除 _ATL_MIN_CRT的宏定义,就可以通过编译。
5.编译成功,终于修成正果,不过还是有点小问题,程序界面中没有正确出现XP的样式效果,这个留到后面的环节中处理。
五、配置ResEdit的相关内容,让.rc资源的编辑可视化。
1.在CodeBlocks中将.rc资源文件关联到ResEdit这个程序,这样双击.rc文件就可以自动的调用ResEdit进行编辑了。
选择菜单"Settings---Environment"后,在对话框中找到"Files extension handling"后,添加一个*.rc的关联,如下图:
选择使用Windows默认的关联程序进行rc资源文件的编辑,在下面一个步骤中将ResEdit与.rc资源文件进行一下关联就能双击打开编辑。
2.直接在Windows的资源管理器中,进入D:\CodeBlocks\Tools\ResEdit后运行ResEdit Launcher.exe,然后选择菜单“Options---Proferences”,对ResEdit进行配置,
Block style默认是C:{...}风格,在VisualFC的插件中是不支持的,如果使用这个默认值,就不能使用VisualFC进行可视化的事件添加等操作,所以必须改成BEGIN...END风格,我在这儿卡了很长时间才分析出VisualFC插件中总是找不到对话框与控件列表的原因。
//这是原来的默认内容,没有使用WTL的atlre.h包含文件,所以需要改一下。
#include <windows.h> </span>
#include <commctrl.h>
#include <richedit.h>
#include "%RESOURCE_HEADER%"%RESOURCES%
//这是用于WTL开发的情况。
#include <atlres.h>
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define RT_MANIFEST 24
#include "%RESOURCE_HEADER%"%RESOURCES%
3.经过上面的步骤,在CodeBlocks中就可以双击rc文件直接进行编辑,编辑资源文件后,再次回到CodeBlocks编译并运行程序,就可以发现XP样式已经生效,对话框中的按钮都默认使用新的风格了。
六、使用WTL向导生成一个对话框程序,测试资源编辑与可视化事件添加。
1双击CodeBlocks中的rc资源文件,在对话框中添加一个按钮,指定它的ID为IDC_BUTTON1,然后保存退出ResEdit。
2.打开VFCTools后,添加上面测试按钮的事件处理函数,打开菜单“Tools---VFCTools”,在VFCTools窗口中,选择CMainDlg,IDD_MAINDLG资源,然后就可以添加事件处理过程。
上面的事件处理过程添加完毕后,回到CodeBlocks打开MainDlg.cpp文件,就可以看到以下代码,将自己的处理过程写入就可以了。
LRESULT CMainDlg::OnButton1(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{//弹出一个MesageBox框。::MessageBox(m_hWnd,_T("这是一个测试按钮的事件处理过程"),_T("提示"),MB_OK |MB_ICONINFORMATION);return 0;
}
七、添加程序调试的支持
1.设置调试器,让CodeBlocks可以调试WTL程序,默认的gdb调试器是不支持调用VC++ 6.0中编译出来的程序的,所以我们需要再进行一次设置。选择菜单“Settings---Debugger”,然后点击“Create Config“按钮,添加一个新的配置。
$(CODEBLOCKS)\VC6\Bin\cdb.exe
然后在菜单中“Debug---Active Debuggers"中选择新创建的CDB调试器,工程设置成Win32 Debug,然后在菜单"Project---Build Options'中的编译选项中加入调试信息。
然后就可以下断点调试了,不过比较遗憾的就是很多变量的值在调试时看不到,调试功能变得相对比较鸡肋一些,不如在VC中方便。
八、后语,解决问题的过程是痛苦的,完美实现CodeBlocks中开发WTL程序后,心情是不错的。
注:以上内容部分参考自以下资料:
http://blog.csdn.net/visualfc/article/details/4236584
http://blog.csdn.net/liquanhai/article/details/6618300
在CodeBlocks中完美使用WTL进行开发相关推荐
- 我迄今见过最完美的中文编程开发工具
本期介绍的主要人物是2021首届VCN软件开发者开源大赛一等奖得主--冰糖葫芦要加冰和糖,代表作品<厨房宝盒>. #关于我# 大家好 我是冰糖葫芦要加冰和糖 生于95年的编程爱好者 跟大家 ...
- 超级十全大补贴!!打造您心目中完美的TREO!!『上』
超级十全大补贴!!打造您心目中完美的TREO!!『上』 我是去年8月用600,再到10月分入手650,一直到现在,不知不觉已经过了那么久了.快乐的时间总是过得快啊,怪不得王羲之说:快然自足,曾不知老之 ...
- ASP.NET 2.0 正式版中无刷新页面的开发
ASP.NET 2.0 正式版中无刷新页面的开发 在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, AS ...
- 在codeblocks中使用C++11标准,安装及配置方法
原文:http://www.lai18.com/content/624976.html 用过的codeblocks的人都知道,这款软件是相当的棒.同时在2011年推出的C++11新标准也是非常的强大, ...
- QT中树控件QTreeView开发实例
转自:http://mobile.51cto.com/symbian-268700.htm 本文讲解了QT中树控件QTreeView开发实例,对于QTreeView没有过多的讲解,那么不说废话了,看代 ...
- 在Html中使用Requirejs进行模块化开发
在前端模块化的时候,不仅仅是js需要进行模块化管理,html有时候也需要模块化管理.这里就介绍下如何通过requirejs,实现html代码的模块化开发. 如何使用requirejs加载html Re ...
- ubuntu版php开发工具,Ubuntu 中搭建 LAMP 及 php 开发工具
Ubuntu 中搭建 LAMP 及 php 开发工具 Step1. 安装 Apache 1.在 terminal 中输入一下命令并执行: sudo apt-get install apache2 2. ...
- Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案
Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案 DreamFollowerss 2020-05-25 12:03:08 3 ...
- java xfire webservice 异步_[Java教程]Java中使用webservice,简化开发(xfire的webservice)...
[Java教程]Java中使用webservice,简化开发(xfire的webservice) 0 2016-01-07 15:00:11 首先,使用到的jar先导入项目中, xbean-sprin ...
最新文章
- python 数据分析学什么-数据分析培训学习多久?都学什么?
- nginx源码分析之模块初始化
- (三)git常用命令及方法大全
- [转载] 快速学习-Mybatis框架概述
- ht1621b和单片机电平匹配_基于HT1621B段式液晶模块的驱动应用
- Android thumbnail 图片的获得及与原始图片的映射
- nafxcw.lib与LIBCMT.LIB链接冲突
- Android自动化测试在多种屏幕下的注意事项
- 2016英语三级分数计算机,2016年英语三级成绩查询准考证号忘了怎么办?
- 科大讯飞语音识别SDK的ROS包修改
- Exchange Server 2013 运维系列——恢复已删除邮件
- 台式电脑怎么添加计算机硬盘,如何在台式电脑增加硬盘的安装及设置方法
- 【LBS】移动互联网基于LBS地理位置应用开发必备
- 一个35岁男人的自学编程之路
- 奇数点偶数点fft的matlab,奇偶链表(奇数节点位于偶数节点之前) Odd Even Linked List...
- 工具类五合一小程序源码星座配对+星座运势+恶搞放屁音效+引流工具+流量主
- C++11 auto关键字的用法
- 计算机教师个人诊改总结,完整版)教师个人诊改报告
- SAP BASIS ADM100 中文版 Unit 8(3)
- C语言看计算机基础(一)