MinGW Windows标题中的CMIC_VALID_SEE_FLAGS / SEE_VALID_CMIC_FLAGS - 这些是什么处理?

时间:2013-08-01 15:56:39

标签: winapi mingw

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

#define CMIC_VALID_SEE_FLAGS   SEE_VALID_CMIC_FLAGS

标题中没有任何地方定义了SEE_VALID_CMIC_FLAGS。在MSDN上搜索没有任何结果。

这条线的目的是什么?

1 个答案:

答案 0 :(得分:0)

SEE_前缀是指SHELLEXECUTEINFO structure中的标志(显然来自于 ShellExecuteEx使用它的地方。

CMIC_前缀用于CMINVOKECOMMANDINFO structure中的标记(由IContextMenu::InvokeCommand使用)。

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

CMIC_VALID_SEE_FLAGS / SEE_VALID_CMIC_FLAGS的值未在任何当前的Win32标头中定义,但我想在MinGW作者制作自己的标头时,它存在于一些旧的SDK中。从名称来看,它似乎是一组在 SHELLEXECUTEINFOIContextMenu::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中记录的标志。