Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92423867
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-15 21:05:14

来源:CSDN    作者:行舟

CMINVOKECOMMANDINFO的成员简介如下:

1) cbSize :结构的大小。

2) fMask :为0,或下列标志的组合。

CMIC_MASK_ASYNCOK 在返回之前等待DDE会话结束
CMIC_MASK_FLAG_NO_UI 当执行命令时,系统防止显示用户接口元素(如错误信息)
CMIC_MASK_HOTKEY dwHotKey 成员有效
CMIC_MASK_ICON hIcon成员有效
CMIC_MASK_NO_CONSOLE 如果上下文菜单handler必须创建新进程,正常情况下将创建一个控制台,设置CMIC_MASK_NO_CONSOLE标志可以禁止创建新的控制台

3) hwnd :拥有上下文菜单窗口的句柄,handler可以使用这个句柄显示自己的信息提示框和对话框。

4) lpVerb :32位值,高位字包含0,低位字是命令的菜单ID偏移。当用户选择一个菜单命令时,Shell用MAKEINTRESOURCE宏产生这个值,如果高位字不是0,那么这个成员指向一个以NULL结尾的字符串,指出命令的语言无关的名称,即上文的verb。典型情况下,当命令被一个应用程序激活时,这个成员是一个字符串。系统提供了下面几个预定义的常数值:

字符串
CMDSTR_NEWFOLDER "NewFolder"
CMDSTR_VIEWDETAILS "ViewDetails"
CMDSTR_VIEWLIST "ViewList"

5) lpParameters :命令传送的参数字符串,对于shell扩展插入的菜单项,这个成员总是NULL。

6) lpDirectory :目录名称,对于shell扩展插入的菜单项,这个成员总是NULL。

7) nShow :显示窗口或启动应用程序时,传递给ShowWindow函数的参数。

8) dwHotKey :分配给被命令激活的应用程序的热键。如果fMask 不是CMIC_MASK_HOTKEY,这个成员被忽略。

9) hIcon :被命令激活的应用程序使用的图标。如果fMask 不是CMIC_MASK_ICON,这个成员被忽略。

以下示例先打开一个"选择文件"的对话框,然后用所选择的程序打开在资源管理器中被选择的文件。为了简化,假定在资源管理器只选择了一个文件。

HRESULT __stdcall TAddContextMenuImpl::InvokeCommand(LPCMINVOKECOMMANDINFO pici)

{

if(HIWORD(pici->lpVerb)==0)

{

if(LOWORD(pici->lpVerb)==0) // 添加的第一个菜单项

{

TOpenDialog *Dlg=new TOpenDialog(NULL);

Dlg->Title="打开\"";

Dlg->Title=Dlg->Title+g_szFilePath+"\"";

Dlg->Options.Clear();

Dlg->Options << ofFileMustExist << ofPathMustExist << ofNoChangeDir;

if(Dlg->Execute())

{

ShellExecute(pici->hwnd,"open",Dlg->FileName.c_str(),g_szFilePath,NULL,SW_SHOW); }

return S_OK;

}

}

return S_FALSE;

}

阅读(350) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~