热情软件屋

 

如何使notepad的某个菜单或者是某个菜单项灰化


编号:QA004767
建立日期: 2003年11月15日 最后修改日期:2003年11月15日
所属类别:

刘振亮:
    操作系统:WIN2000
    编程工具:VC60
    问题:我想做一个automation或者是plug-in程序,在客户端启动一个notepad程序,但我前提是不知道notepad的路径,也不需要知道,然后,我根据我的需要,使notepad的某个菜单或者是某个菜单项灰化!请教!

回答:

    现在我有了变相的答案,虽然不是完全相同,但符合我的要求:如下:
    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

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio