0

在 MinGW Windows API 绑定文件 shlobj.h 中,有这一行:

#define CMIC_VALID_SEE_FLAGS   SEE_VALID_CMIC_FLAGS

标头中没有定义 SEE_VALID_CMIC_FLAGS。在 MSDN 上搜索一无所获。

这条线的目的是什么?

4

1 回答 1

0

SEE_前缀是指SHELLEXECUTEINFO结构中的标志(显然来自
ShellExecuteEx使用它的位置)。

CMIC_前缀用于CMINVOKECOMMANDINFO结构中的标志(由 使用IContextMenu::InvokeCommand)。

如果你检查它们的定义,你会发现它们基本上是相互镜像的。我的猜测是,IContextMenu::InvokeCommand只需将标志复制到SHELLEXECUTEINFO结构并调用ShellExecuteEx.

CMIC_VALID_SEE_FLAGS/的值SEE_VALID_CMIC_FLAGS未在任何当前的 Win32 标头中定义,但我想在 MinGW 作者制作自己的标头时它存在于某些旧 SDK 中。从名称来看,似乎是一组在和中 有效的标志。我的猜测是它在内部用于类似于以下的实现:SHELLEXECUTEINFOIContextMenu::InvokeCommandIContextMenu::InvokeCommand

if ( pici->fMask & ~CMIC_VALID_SEE_FLAGS )
{
   // unsupported flags present. do some extra work
}
else
{
   // we can use it as-is
   SHELLEXECUTEINFO sei;
   sei.cbSize = sizeof(SHELLEXECUTEINFO);
   sei.fMask = pici->fMask;
   // ... etc
   ShellExecuteEx(&sei);
}

简而言之,不要理会这个定义。只需使用 MSDN 中记录的标志。

于 2013-08-01T18:54:44.430 回答