1

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

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

使用 Ctl3d32.dll 渲染的 Win32 版本

没有 Ctl3d32.dll 渲染的 Win64 版本

按钮控件看起来很相似,可以通过,但是像组框一样使用的静态控件(它们看起来像凸起的垫子)被绘制为纯白色矩形,并且编辑窗口没有那种嵌入的外观。

我知道这样做的正确方法是将应用程序移至视觉样式,但目前,它需要在 Win64 和 Win32 中看起来相同。我徒劳地搜索了一种样式或标志,它可能会在不引用CTL3D32.DLL.

除了在 64 位 GDI 代码中复制此功能或迁移到视觉样式之外,还有其他人遇到此问题并提出解决方案吗?

4

0 回答 0