c - 强制使用 ANSI 编辑控件而不是 comctl32 编辑控件

标签 c winapi window controls comctl32

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

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

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

注意 对于 Comctl32.dll 版本 6,缓冲区始终包含 WCHAR 数组,无论编辑控件是由 ANSI 还是 Unicode 函数创建的。有关 DLL 版本的详细信息,请参阅公共(public)控件版本。

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

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

最佳答案

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

如果您的模块是 DLL,那么您可以尝试使用一些隔离技术,这样它就不会依赖于 .exe 决定使用的 COMCTL32.DLL 版本,但这可能会带来许多其他缺点.

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

关于c - 强制使用 ANSI 编辑控件而不是 comctl32 编辑控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14811325/

相关文章:

android - 应用程序如何检测状态栏颜色(Android 5.0 Lollipop)?

c - 使用 memset 初始化结构数组

无法正确输入

c++ - 如何在两个 C++ MFC 插件之间进行通信?

c++ - 更改标题栏图标时如何正确使用 LoadIcon 和 MAKEINTRESOURCE?

c# - 如何编辑Windows窗体资源文件夹中的文本文件#

javascript - 为什么浏览器有时会阻止弹出窗口,有时则不会?

c - 在子进程中运行的程序不会循环

c - malloc() 在 Windows 上崩溃但在 Mac 上没有

c++ - 有没有办法为函数创建预处理器宏?