请问怎么用sendmessage触发某菜单的消息? 菜单的ID是 IDC_A 对应函数十OnA()我想在MainFrame::ontimer里定时触发这个消息,请问怎么写sendmessage函数啊或者其他办法,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 error C2660: 'SendMessageA' : function does not take 2 parameters ::SendMessage(hWnd,WM_COMMAND, IDC_A,0);我这样写,它提示说hWnd未定义 直接SendMessage(WM_COMMAND, IDC_A, 0)就可以了 ::SendMessage(hWnd, WM_COMMAND, IDC_A);hWnd是处理消息的窗口句柄 AfxGetMainWnd()->SendMessage(WM_COMMAND, IDC_A, 0);如果在视里可以AfxGetActiveView()->SendMessage(WM_COMMAND, IDC_A, 0);Doc也有对应的东东可以取到句柄的 看看偶在BCB的解答http://expert.csdn.net/Expert/topic/2752/2752836.xml?temp=1.585025E-02向 Application发送 WM_COMMAND,并使用 MAKELONG 宏将菜单的 ID 号作为 WPARAM 参数传递就可以了。至于 Application 的 Menu ID,可以使用 GetMenu 和 GetSubMenu 等 API 函数来获得。下面这几个函数,希望能对你有用。//---------------------------------------------------------------------------void __fastcall ScanMenuID(AnsiString AppTitle,TStringList *List,int Tab)/*功能: 获得指定应用程序的菜单ID号参数: AppTitle - 应用程序的标题栏文本 List - 保存ID信息的串列表 Tab - 是否根据分级菜单在List中增加TAB键返回值: 无*/{ HWND hMicapsWnd = FindWindow(NULL,AppTitle.c_str()); ScanMenuID(GetMenu(hMicapsWnd),List,0);}//---------------------------------------------------------------------------void __fastcall ScanMenuID(HMENU AppMenu,TStringList *List,int Tab)/*功能: 获得指定应用程序的菜单ID号参数: AppNenu - 应用程序的菜单Handle List - 保存ID信息的串列表 Tab - 是否根据分级菜单在List中增加TAB键返回值: 无*/{ if( AppMenu == NULL ) return; int Count = 0; long ID; Count = GetMenuItemCount(AppMenu); char lpString[128]; // pointer to the buffer for the string for( int i=0;i<Count;i++ ) { if( GetMenuString( AppMenu, i, lpString, 128, MF_BYPOSITION ) != 0 ) { ID = GetMenuItemID(AppMenu,i); List->Add(AnsiString::StringOfChar('\t',Tab)+AnsiString(lpString)+ (ID != 4294967295 ? AnsiString("\tID = ")+IntToStr(ID) : AnsiString(""))); if( GetSubMenu(AppMenu,i) != NULL ) ScanMenuID(GetSubMenu(AppMenu,i),List,Tab+1); } }}//---------------------------------------------------------------------------bool MenuFromId(HWND hWnd, int id)/*功能: 执行指定应用程序指定ID号的菜单项参数: hWnd - 应用程序的Handle id - 要执行的菜单ID号返回值: 执行成功则为true,否则为false*/{ if( hWnd != NULL ) { return(PostMessage(hWndMicaps,WM_COMMAND,MAKELONG(id,0),NULL)); } return(false);}//--------------------------------------------------------------------------- WM_NCACTIVATE 钩子如何写 'CryptProtectData' : undeclared identifier 如何用tcp/ip实现实时传输 树结点重命名问题 急需帮忙!谢谢! 装载hook总是出错,帮忙看一下! 〔求助〕关于网络加密 关于winpcap的若干问题 极其一般的问题:如何实现无标题栏对话框的拖动? 请教下文本有很多段组成,每段有不同颜色,如何输出比较好。 100分求一个小程序,非常简单的,分我一定给. 请问delphi和vc下的回调函数有什么区别呢?
我这样写,它提示说hWnd未定义
如果在视里可以
AfxGetActiveView()->SendMessage(WM_COMMAND, IDC_A, 0);
Doc也有对应的东东可以取到句柄的
下面这几个函数,希望能对你有用。
//---------------------------------------------------------------------------
void __fastcall ScanMenuID(AnsiString AppTitle,TStringList *List,int Tab)
/*
功能:
获得指定应用程序的菜单ID号
参数:
AppTitle - 应用程序的标题栏文本
List - 保存ID信息的串列表
Tab - 是否根据分级菜单在List中增加TAB键
返回值:
无
*/
{
HWND hMicapsWnd = FindWindow(NULL,AppTitle.c_str());
ScanMenuID(GetMenu(hMicapsWnd),List,0);
}
//---------------------------------------------------------------------------
void __fastcall ScanMenuID(HMENU AppMenu,TStringList *List,int Tab)
/*
功能:
获得指定应用程序的菜单ID号
参数:
AppNenu - 应用程序的菜单Handle
List - 保存ID信息的串列表
Tab - 是否根据分级菜单在List中增加TAB键
返回值:
无
*/
{
if( AppMenu == NULL )
return;
int Count = 0;
long ID;
Count = GetMenuItemCount(AppMenu);
char lpString[128]; // pointer to the buffer for the string
for( int i=0;i<Count;i++ )
{
if( GetMenuString(
AppMenu,
i,
lpString,
128,
MF_BYPOSITION
) != 0 )
{
ID = GetMenuItemID(AppMenu,i);
List->Add(AnsiString::StringOfChar('\t',Tab)+AnsiString(lpString)+ (ID != 4294967295 ? AnsiString("\tID = ")+IntToStr(ID) : AnsiString("")));
if( GetSubMenu(AppMenu,i) != NULL )
ScanMenuID(GetSubMenu(AppMenu,i),List,Tab+1);
}
}
}
//---------------------------------------------------------------------------
bool MenuFromId(HWND hWnd, int id)
/*
功能:
执行指定应用程序指定ID号的菜单项
参数:
hWnd - 应用程序的Handle
id - 要执行的菜单ID号
返回值:
执行成功则为true,否则为false
*/
{
if( hWnd != NULL ) {
return(PostMessage(hWndMicaps,WM_COMMAND,MAKELONG(id,0),NULL));
}
return(false);
}
//---------------------------------------------------------------------------