我的任务是制作一个 64 位版本的老式 Win32 Windows 应用程序,用 C/C++ 编写并打包为 DLL。64 位应用程序现在运行,但对话框中的控件在 Win64 和 Win32 上看起来不同。原因是该程序执行一个LoadLibrary("ctl3d32.dll")
,如果成功,GetProcAddress()
则用于收集库入口点,如Ctl3dSubclassCtl()
,然后这些入口点用于子类化每个控件类。
但是,LoadLibrary()
失败是_WIN64
因为没有此 DLL 的 64 位版本。这会导致使用默认值呈现控件(这是在 Windows 10 上——顶部是 Win32,底部是 Win64):
按钮控件看起来很相似,可以通过,但是像组框一样使用的静态控件(它们看起来像凸起的垫子)被绘制为纯白色矩形,并且编辑窗口没有那种嵌入的外观。
我知道这样做的正确方法是将应用程序移至视觉样式,但目前,它需要在 Win64 和 Win32 中看起来相同。我徒劳地搜索了一种样式或标志,它可能会在不引用CTL3D32.DLL
.
除了在 64 位 GDI 代码中复制此功能或迁移到视觉样式之外,还有其他人遇到此问题并提出解决方案吗?