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_prefix は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 の文書化されたフラグを使用するだけです。

于 2013-08-01T18:54:44.430 に答える