【问题标题】:OLE Drag and Drop: use wide char or not?OLE 拖放:是否使用宽字符?
【发布时间】:2020-10-13 09:36:19
【问题描述】:

实现 IDropSource 需要创建和填充 DROPFILES 结构。 fWide 成员指定是否应使用宽字符串。

由于我将文件拖放到 Windows 文件系统,我应该什么时候使用宽字符? 我知道从文件资源管理器 拖动文件会产生 fWide==TRUE,至少在我的 Windows 10(多语言)上是这样。但是,这在其他 Windows 风格上可能会有所不同。如何确定使用哪个?

相反,在实现 IDropTarget 时我应该在什么时候期望 fWide==TRUE?

【问题讨论】:

  • 总是,现在已经不是 1998 年了。
  • 有没有关于它的 MSDN 文档?

标签: c windows winapi drag-and-drop ole


【解决方案1】:

宽(Unicode)保证正确存储字符串,窄字符串(“ANSI”)则不然。

当您收到此数据时,您应该支持这两种格式。 DragQueryFileW 会为你做这件事。

当您自己手动构建此结构时,您通常应该使用宽字符串。

您的数据有 3 种可能的接收者:

  • 基于 NT 的 Windows 版本(过去 20 年发布的任何版本)。原生字符串类型是宽的,但也支持窄字符串。

  • Windows 95/98/ME 使用窄字符串作为其原生字符串类型,不要期望大多数地方都支持宽字符串。您不太可能关心这些 Windows 版本。

  • 第三方软件。不可能提前知道他们支持什么。您只需要寄希望于最好的结果并使用宽字符串。

理想情况下,您的数据对象还包含CFSTR_SHELLIDLIST 格式,这应该可以避免大多数字符串问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多