在 MinGW Windows API 绑定文件 shlobj.h 中,有这一行:
#define CMIC_VALID_SEE_FLAGS SEE_VALID_CMIC_FLAGS
标头中没有定义 SEE_VALID_CMIC_FLAGS。在 MSDN 上搜索一无所获。
这条线的目的是什么?
SEE_
前缀是指SHELLEXECUTEINFO
结构中的标志(显然来自
ShellExecuteEx
使用它的位置)。
CMIC_
前缀用于CMINVOKECOMMANDINFO
结构中的标志(由 使用IContextMenu::InvokeCommand
)。
如果你检查它们的定义,你会发现它们基本上是相互镜像的。我的猜测是,IContextMenu::InvokeCommand
只需将标志复制到SHELLEXECUTEINFO
结构并调用ShellExecuteEx
.
CMIC_VALID_SEE_FLAGS
/的值SEE_VALID_CMIC_FLAGS
未在任何当前的 Win32 标头中定义,但我想在 MinGW 作者制作自己的标头时它存在于某些旧 SDK 中。从名称来看,似乎是一组在和中都 有效的标志。我的猜测是它在内部用于类似于以下的实现:SHELLEXECUTEINFO
IContextMenu::InvokeCommand
IContextMenu::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 中记录的标志。