64位版本的CTL3D32.DLL?

时间:2016-07-21 21:28:03

标签: windows winapi win64 common-controls

我的任务是生成一个64位版本的旧式Win32 Windows应用程序,用C / C ++编写并打包为DLL。现在运行64位应用程序,但对话框中的控件在Win64上与Win32看起来不一样。原因是程序执行LoadLibrary("ctl3d32.dll"),如果成功,GetProcAddress()用于收集像Ctl3dSubclassCtl()这样的库入口点,然后这些入口点用于子类化每个控件类。

但是LoadLibrary()_WIN64中失败,因为此DLL没有64位版本。这会导致使用默认值呈现控件(这是在Windows 10上 - 顶部是Win32,底部是Win64):

Win32 version rendered with Ctl3d32.dll

Win64 version rendered without Ctl3d32.dll

按钮控件看起来类似于传递,但是像组框一样使用的静态控件(它们看起来像凸起的垫)被绘制为纯白色矩形,编辑窗口没有嵌入的外观。

我知道正确的方法是将应用程序移动到视觉样式但是现在,它需要在Win64和Win32中看起来相同。我徒劳地搜索了一个样式或标志,可能会在不引用CTL3D32.DLL的情况下启用此行为。

是否还有其他人遇到过这个问题,并提出了一个解决方案,而不是在64位GDI代码中复制此功能或转移到Visual Styles?

0 个答案:

没有答案