在MinGW Windows API绑定文件shlobj.h中,有这一行:
#define CMIC_VALID_SEE_FLAGS SEE_VALID_CMIC_FLAGS
标题中没有任何地方定义了SEE_VALID_CMIC_FLAGS。在MSDN上搜索没有任何结果。
这条线的目的是什么?
答案 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中。从名称来看,它似乎是一组在 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中记录的标志。