windows MFC链接控件在运行时看起来/作为一个公共按钮

cgh8pdjw  于 2023-06-24  发布在  Windows
关注(0)|答案(2)|浏览(136)

我必须维护一个非常旧的MFC应用程序(基于对话框),现在我需要添加一个超链接到UI。
我使用Visual Studio 2022来做这项工作,发现工具箱中有一个“MFC链接控件”。在将其拖到UI并在对话框测试中尝试(Ctrl + T)后,它工作得很好。它以蓝色和下划线字体显示,当我点击它时,它可以转到我设置的URL。
但当我运行它时,一切都变了。它看起来像一个普通的按钮,没有蓝色或下划线。当我点击它的时候,什么也没发生。
我创建了一个新的MFC解决方案来测试MFC链接控件,它按预期工作。所以我猜旧的解决方案中的某些东西阻止了MFC链接控件的工作,但我不知道是什么。我已经在上面浪费了4个小时了,所以如果有人能给予我一些信息,那将是非常有帮助的。

  • 在最初开发旧应用程序时,还没有关于使用哪个IDE的信息。现在它是由Visual Studio 2010发布时构建的。

更新:该项目支持多语言。.rc文件由英语、中文和日文混合而成,文件编码为Shift-Jis(不是unicode或UTF-8)。也许它有一些影响。

ukdjmx9f

ukdjmx9f1#

搜索了一下Microsoft文档,发现以下内容:

  • 应用程序必须使用ComCtl32.dll版本6(或6.10),参见About SysLink Controls
  • 在Visual Studio中检查项目的清单。另外,在项目的“常规属性”中,选中“Windows SDK版本”和“平台工具集”选项。较旧的项目可能正在使用较旧版本的ComCtl32.dll。也检查Enabling Visual Styles
  • 应用程序必须使用控件位掩码中包含的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中):

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

这告诉链接器加载comctl32版本6。

guykilcj

guykilcj2#

我终于知道为什么了。因为MFC很老所以我考虑了很多可能性,但道理很简单。
项目中还有其他对话框,当我向它们添加MFC链接控件时,它们都没问题。所以问题一定不是在项目设置上,像dll版本。
我做了另一个新的对话框,并一点一点地将源代码复制到它上面,当我复制函数“OnInitDialog()”时,它发生了。
我只是错过了调用基类的“OnInitDialog()”。我添加了呼叫,然后它工作了。
如果错过导致运行时错误,我想我可以注意到它,但它只是显示一个链接控件作为一个按钮...
@Constantine Georgiou你帮了我很多,我也得到了一些有用的信息。所以我接受了你的回答。

相关问题