COleServerDoc::OnExecOleCmd

HRESULT OnExecOleCmd( const GUID* pGroup, DWORD nCmdID, DWORD nCmdExecOut, VARIANTARG* pvaIn, VARIANTARG* pvaOut );

返回值:
如果成功则返回S_OK;否则,返回下列错误代码之一:
描述
E_UNEXPECTED发生了意外的错误
E_FAIL发生了错误
E_NOTIMPL表明MFC自身要尝试翻译和分派命令
OLECMDERR_E_UNKNOWNGROUPpGroup不是NULL,但是不表示一个被认可的命令组
OLECMDERR_E_NOTSUPPORTEDnCmdID不被认可为是pGroup群中的有效命令
OLECMDERR_DISABLED由nCmdID标识的命令被变为无效,不能被执行
OLECMDERR_NOHELP调用者请求有关由nCmdID标识的命令的帮助,但是没有可用的帮助
OLECMDERR_CANCELED用户取消了执行

参数:
pGroup一个指向GUID的指针,这个GUID标识了一个命令集。它可以是NULL,这表示缺省的命令组。
nCmdID要执行的命令。必须是在由pGroup标识的组中。
nCmdExecOut对象执行命令的方式,可以是下列OLECMDEXECOPT枚举值中的一个或某几个:
·OLECMDEXECOPT_DODEFAULT
·OLECMDEXECOPT_PROMPTUSER
·OLECMDEXECOPT_DONTPROMPTUSER
·OLECMDEXECOPT_SHOWHELP
pvaIn指向一个VARIANTARG的指针,这个VARIANTARG包含了命令的输入参数。它可以是NULL。
pvaOut指向一个VARIANTARG的指针,这个VARIANTARG用来接收来自命令的输出返回值。它可以是NULL。

说明:
框架调用这个函数来执行一个指定的命令,或为命令显示帮助。
COleCmdUI可以用来使能,更新和设置DocObject用户界面命令的其它属性。
在命令被初始化之后,你可以用OnExecOleCmd来执行它们。在框架尝试翻译和分派一个OLE文档命令之前,它调用这个函数。在处理标准的OLE文档命令时,你不必重载这个函数。但是如果你想处理你自己的定制命令,或处理需要接收参数或返回结果的命令时,你必须要重载这个函数。
大多数命令不需要接收参数或返回结果。对于大多数的命令来说,调用者可以将NULL赋给pvaIn和pvaOut。对于那些需要接收输入参数的命令,调用者可以声明和初始化一个VARIANTARG变量,并将一个指针传递给pvaIn中的变量。对需要一个单一值的命令,参数被直接保存在VARIANTARG中,并传递给函数。而多个参数则必须要在VARIANTARG中使用某个允许的类型(如IDispatch和SAFEARRAY)来打包。
类似的,如果一个命令要返回参数,则调用者需要定义一个VARIANTARG,将它初始化为VT_EMPTY,并将它的地址传递给pvaOut。如果命令返回一个单一的值,则对象可以将这个值直接保存在pvaOut中。如果有多个输出值则必须用某种适用于VARIANTARG的方法来打包。
这个函数的基类实现将使OLE COMMAND_MAP结构与命令目标相联系,并尝试为命令分派一个合适的句柄。函数的基类实现只处理不接收参数和不返回结果的命令。如果你需要处理接收参数或返回结果的命令,你就必须重载这个函数,并且自己来处理pvaIn和pvaOut。

请参阅:COleCmdUI