Win32 Common Controls初始化会破坏自定义控件吗?

Dut*_*tch 1 c windows winapi

所以我试图在Win32中初始化Common Controls和视觉样式.我构建了一个DLL,其中包含我编写的一些自定义控件,以及一个包含GUI应用程序的EXE.

通常情况下,责任分离似乎是我的DLL不应该担心我们是否启用窗口样式.它应该只生成自定义控件并将它们暴露给依赖的EXE.然后EXE可以决定它是否需要视觉样式,并且DLL不是更明智的.

问题是:我的DLL在进程附加中在DllMain中注册了它的窗口类.但是,如果我叫INITCOMMONCONTROLSEX的EXE,里面我的自定义控制按钮和诸如此类的东西显示不出来,因为自定义控件登记前的EXE可以初始化公共控件.

为了证明这一点,我在EXE调用InitCommonControlsEx 之后强制取消注册并重新注册我的自定义控件,并修复它:按钮显示在我的自定义控件上,带有视觉样式.

在理想的世界中,我希望能够在将来的程序中链接到我的共享库,并开始使用自定义控件,而无需担心修复常见控件和样式的问题.这可能吗?

Jon*_*ter 5

简短的回答是,你不打算注册窗口类或做更多的事情DllMain().

您应该提供Init()从DLL导出的单独函数,应用程序可以调用该函数来注册DLL的控件,就像它调用函数(InitCommonControls())来注册公共控件一样.