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进行开发相关推荐

  1. 我迄今见过最完美的中文编程开发工具

    本期介绍的主要人物是2021首届VCN软件开发者开源大赛一等奖得主--冰糖葫芦要加冰和糖,代表作品<厨房宝盒>. #关于我# 大家好 我是冰糖葫芦要加冰和糖 生于95年的编程爱好者 跟大家 ...

  2. 超级十全大补贴!!打造您心目中完美的TREO!!『上』

    超级十全大补贴!!打造您心目中完美的TREO!!『上』 我是去年8月用600,再到10月分入手650,一直到现在,不知不觉已经过了那么久了.快乐的时间总是过得快啊,怪不得王羲之说:快然自足,曾不知老之 ...

  3. ASP.NET 2.0 正式版中无刷新页面的开发

    ASP.NET 2.0 正式版中无刷新页面的开发 在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, AS ...

  4. 在codeblocks中使用C++11标准,安装及配置方法

    原文:http://www.lai18.com/content/624976.html 用过的codeblocks的人都知道,这款软件是相当的棒.同时在2011年推出的C++11新标准也是非常的强大, ...

  5. QT中树控件QTreeView开发实例

    转自:http://mobile.51cto.com/symbian-268700.htm 本文讲解了QT中树控件QTreeView开发实例,对于QTreeView没有过多的讲解,那么不说废话了,看代 ...

  6. 在Html中使用Requirejs进行模块化开发

    在前端模块化的时候,不仅仅是js需要进行模块化管理,html有时候也需要模块化管理.这里就介绍下如何通过requirejs,实现html代码的模块化开发. 如何使用requirejs加载html Re ...

  7. ubuntu版php开发工具,Ubuntu 中搭建 LAMP 及 php 开发工具

    Ubuntu 中搭建 LAMP 及 php 开发工具 Step1. 安装 Apache 1.在 terminal 中输入一下命令并执行: sudo apt-get install apache2 2. ...

  8. Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案

    Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案 DreamFollowerss 2020-05-25 12:03:08  3 ...

  9. java xfire webservice 异步_[Java教程]Java中使用webservice,简化开发(xfire的webservice)...

    [Java教程]Java中使用webservice,简化开发(xfire的webservice) 0 2016-01-07 15:00:11 首先,使用到的jar先导入项目中, xbean-sprin ...

最新文章

  1. python 数据分析学什么-数据分析培训学习多久?都学什么?
  2. nginx源码分析之模块初始化
  3. (三)git常用命令及方法大全
  4. [转载] 快速学习-Mybatis框架概述
  5. ht1621b和单片机电平匹配_基于HT1621B段式液晶模块的驱动应用
  6. Android thumbnail 图片的获得及与原始图片的映射
  7. nafxcw.lib与LIBCMT.LIB链接冲突
  8. Android自动化测试在多种屏幕下的注意事项
  9. 2016英语三级分数计算机,2016年英语三级成绩查询准考证号忘了怎么办?
  10. 科大讯飞语音识别SDK的ROS包修改
  11. Exchange Server 2013 运维系列——恢复已删除邮件
  12. 台式电脑怎么添加计算机硬盘,如何在台式电脑增加硬盘的安装及设置方法
  13. 【LBS】移动互联网基于LBS地理位置应用开发必备
  14. 一个35岁男人的自学编程之路
  15. 奇数点偶数点fft的matlab,奇偶链表(奇数节点位于偶数节点之前) Odd Even Linked List...
  16. 工具类五合一小程序源码星座配对+星座运势+恶搞放屁音效+引流工具+流量主
  17. C++11 auto关键字的用法
  18. 计算机教师个人诊改总结,完整版)教师个人诊改报告
  19. SAP BASIS ADM100 中文版 Unit 8(3)
  20. C语言看计算机基础(一)

热门文章

  1. 谷歌浏览器最新版下载链接
  2. 金和单点自动判断内外网
  3. 手机充满电自动断电,使用autojs+天猫精灵+智能插座实现
  4. C语言程序之经典习题:运输公司对用户计算运输费用。路程(s/km)越远,每吨/千米运费越低。
  5. 转载:详解SAP TPM解决方案在快速消费品行业中的应用
  6. 带你了解WiFi共享精灵的共享模式
  7. 非广州户籍可以报考广州公务员么_看看官方怎么说
  8. 2017年计算机应用基础自考试题,三問美育科目進中考
  9. matlab 汽车振动,基于 MATLAB 的汽车半主动悬架振动控制
  10. java四个方向的九乘九乘法表