我的任务是生成一个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代码中复制此功能或转移到Visual Styles?