我必须维护一个非常旧的MFC应用程序(基于对话框),现在我需要添加一个超链接到UI。
我使用Visual Studio 2022来做这项工作,发现工具箱中有一个“MFC链接控件”。在将其拖到UI并在对话框测试中尝试(Ctrl + T)后,它工作得很好。它以蓝色和下划线字体显示,当我点击它时,它可以转到我设置的URL。
但当我运行它时,一切都变了。它看起来像一个普通的按钮,没有蓝色或下划线。当我点击它的时候,什么也没发生。
我创建了一个新的MFC解决方案来测试MFC链接控件,它按预期工作。所以我猜旧的解决方案中的某些东西阻止了MFC链接控件的工作,但我不知道是什么。我已经在上面浪费了4个小时了,所以如果有人能给予我一些信息,那将是非常有帮助的。
- 在最初开发旧应用程序时,还没有关于使用哪个IDE的信息。现在它是由Visual Studio 2010发布时构建的。
更新:该项目支持多语言。.rc文件由英语、中文和日文混合而成,文件编码为Shift-Jis(不是unicode或UTF-8)。也许它有一些影响。
2条答案
按热度按时间ukdjmx9f1#
搜索了一下Microsoft文档,发现以下内容:
ICC_LINK_CLASS
标志调用InitCommonControlsEx()
,请参见How to Create SysLink Controls。在MFC中,这在CWinApp
类的InitInstance()
函数中完成。ICC_LINK_CLASS
未包含在ICC_WIN95_CLASSES
位掩码中(请检查 CommCtrl.h 头文件中的定义),因此您可能需要自己添加,例如ICC_WIN95_CLASSES | ICC_LINK_CLASS
。编辑:
在你的源代码中添加下面一行(例如在app类souce中):
这告诉链接器加载comctl32版本6。
guykilcj2#
我终于知道为什么了。因为MFC很老所以我考虑了很多可能性,但道理很简单。
项目中还有其他对话框,当我向它们添加MFC链接控件时,它们都没问题。所以问题一定不是在项目设置上,像dll版本。
我做了另一个新的对话框,并一点一点地将源代码复制到它上面,当我复制函数“OnInitDialog()”时,它发生了。
我只是错过了调用基类的“OnInitDialog()”。我添加了呼叫,然后它工作了。
如果错过导致运行时错误,我想我可以注意到它,但它只是显示一个链接控件作为一个按钮...
@Constantine Georgiou你帮了我很多,我也得到了一些有用的信息。所以我接受了你的回答。