强制ANSI编辑控件而不是comctl32编辑控件

时间:2013-02-11 11:57:14

标签: c winapi window controls comctl32

我构建了一个模块,用于创建一个带有来自windows的EDIT窗口类的编辑框的窗口。它被设计为仅使用ansi字符集而不使用任何unicode。

我利用EM_GETHANDLE将缓冲区接收到编辑控件。

现在这是我的问题:(引自上面的链接)

Note For Comctl32.dll version 6, the buffer always contains an array of WCHARs, regardless of whether an ANSI or Unicode function created the edit control. For more information on DLL versions, see Common Control Versions.

因此,当我的模块被一个初始化了comctl32的应用程序加载时,我的整个代码就会中断。

我的问题:有没有办法阻止CreateWindowA使用comclt32或有没有人有想法解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果应用程序的清单中指定了COMCTL32.DLL,则应用程序使用COMCTL32.DLL,例如:在这里:http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx

如果您的模块是DLL,那么您可能会尝试使用某种隔离技术,因此它不依赖于.exe决定使用的WM_GETTEXTA版本,但这可能会带来许多其他缺点。

我建议改用GetWindowTextA()或{{1}},这会将转换后的字符串复制到缓冲区中。设计一个需要旧版DLL才能正常工作的模块简直是个坏主意。