如何使notepad的某个菜单或者是某个菜单项灰化
编号:QA004767
建立日期: 2003年11月15日 最后修改日期:2003年11月15日
所属类别:
Q
刘振亮:
操作系统:WIN2000
编程工具:VC60
问题:我想做一个automation或者是plug-in程序,在客户端启动一个notepad程序,但我前提是不知道notepad的路径,也不需要知道,然后,我根据我的需要,使notepad的某个菜单或者是某个菜单项灰化!请教!
A回答:
现在我有了变相的答案,虽然不是完全相同,但符合我的要求:如下:
HWND m_hWnd;
m_hWnd = ::FindWindow(NULL,"123.txt - 记事本
");
if (0 == m_hWnd)
{
AfxMessageBox("Error!");
return;
}
if ( 0 != m_hWnd )
{
char m_strName[20];
MENUITEMINFO lpmii; //菜单项信息;
lpmii.cbSize = sizeof(MENUITEMINFO);//必须填写,在使用之前;
lpmii.fMask = MIIM_STATE;//设置使得能使某个菜单项灰化,为.fstate作准备;
lpmii.fState = MFS_DISABLED;//使不可用;
HMENU hMenu = ::GetMenu( m_hWnd);//获得菜单;
HMENU hSubMenu = GetSubMenu(hMenu,3);//获得子菜单;
/* int count = ::GetMenuItemCount(hMenu);
for (int i = 1; i <= count;i++)
{
LPSTR AA = ::GetCommandLine();
::GetDlgItemText(m_hWnd,i,m_strName,20);
::setcon
::GetMenuString(hMenu,i,m_strName,20,MF_BYPOSITION);
UINT uInt = ::GetMenuItemID(hMenu,i);
}*/
SetMenuItemInfo(hSubMenu,2,true,&lpmii);//设置子菜单下的某一项不可用;
::AppendMenu( hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, _T("AppendMenu"));//增加一个菜单;
::DrawMenuBar( m_hWnd );//重画菜单,使所做的更改可见;
}
}
基本上可以满足我所需要的,看若是有什么更好的方法,麻烦您告诉我一声,非常感谢,还有我还有一个问题请教:就是我要控制adobe reader的工具栏,因为它不属于这个菜单的,所以目前还没有找到相应的做法,目的一样,使它不可以用,就ok了!非常感谢您!
此问题由刘振亮回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 窗体与菜单, form, window, tform。
| |
|
|
| |
|
|