自己对WTL使用中一个小问题的解决方法

来源:互联网 发布:列车通信网络 编辑:程序博客网 时间:2024/06/05 05:27
 
文章来源:https://bbs.et8.net/bbs/archive/index.php/t-899260.html
问题可见:http://topic.csdn.net/t/20051231/12/4492731.html

使用WTL新建一个对话框程序,但是加入按钮和按钮的点击事件处理函数之后,编译不通了
具体步骤很简单,用默认设置建立一个基于对话框的程序,这个时候编译可以通过,一切正常,
然后在资源视图中朝主窗口MainDlg拖放一个按钮,这个时候编译也可以通过,
然后在资源视图中双击新增的按钮,增加默认的OnBnClickedXXXXX事件处理函数,这个时候编译出现如下错误提示:
error C2065: “IDD_MAINDLG” : 未声明的标识符
error C2143: 语法错误 : 缺少“,”(在“<”的前面)
error C2143: 语法错误 : 缺少“;”(在“public”的前面)
error C2146: 语法错误 : 缺少“;”(在标识符“END_UPDATE_UI_MAP”的前面)
error C2504: “CUpdateUI” : 未定义基类
warning C4183: “BEGIN_UPDATE_UI_MAP”: 缺少返回类型;假定为返回“int”的成员函数
warning C4183: “END_UPDATE_UI_MAP”: 缺少返回类型;假定为返回“int”的成员函数

不知道这是什么原因?是我添加事件处理函数的方式有问题?或者是其他原因,请有方面经验的兄弟指点一下。谢谢!
我使用的是VS.NET 2003,WTL版本为7.5最终稳定发布版,路径设置也没有问题,默认情况下是可以编译通过的。

想问问CCF有没有兄弟用WTL的?我那个问题在CSDN上挂了快两年,居然没人搭理,在google上用“error C2504 CUpdateUI 未定义基类”为关键字搜索,只有两个结果,可见用的人确实不多啊。

在公司的时候自己花了点时间找到了解决办法,可惜公司论坛挂了之后被人给删了,今天又遇到了,再次花时间搞了一下,记录一下,也给比我更菜的兄弟(如果有的话,呵呵)一个机会不走弯路。

我个人认为原因应该是因为IDE默认在.cpp中放置实现代码,而没有添加适当的头文件,导致模板实例化的时候不能找到合适的基类。

解决方法:

在stdafx.h最后添加:
#include <atlframe.h>
#include "resource.h"
(然后可以去掉"你的项目名.cpp"中的相同两行)
在maindlg.h开始添加:
#include "aboutdlg.h"

虽然是解决了,但是resource.h放在stdafx.h里面总觉得怪怪的,不知道有没有其他更好的办法,请高手指教。
原创粉丝点击