我通过findwindow找到一个窗口后,向那个窗口发送回车消息,这样发送对不对

grf9527 2012-05-21 03:49:45
下面的代码无法触发带二段代码执行,但是成功的把第二个窗口设置成活动窗口,并且放在了顶层
CWnd *pMainWnd,*pSubWnd;
pMainWnd=CWnd::FindWindow(NULL,_T("testwindow"));
if(pMainWnd)
{
pSubWnd=pMainWnd-> GetLastActivePopup();
pMainWnd-> ShowWindow(SW_SHOW);
pSubWnd-> SetForegroundWindow();


pMainWnd->ShowWindow(SW_SHOW);
CRect rc;
pMainWnd->GetClientRect(&rc);
TRACE("\r\n%d %d %d %d\r\n",rc.left,rc.top,rc.right,rc.bottom);

ClientToScreen(&rc);
TRACE("\r\n%d %d %d %d \r\n",rc.left,rc.top,rc.right,rc.bottom);

pMainWnd->ShowWindow(SW_SHOW);

::SendMessage(pMainWnd->m_hWnd,WM_KEYDOWN,VK_RETURN,VK_RETURN);
::SendMessage(pMainWnd->m_hWnd,WM_KEYUP,VK_RETURN,VK_RETURN);
pMainWnd->SetActiveWindow();
}


发送出去的是不是成功呢,

我在testwindow那里做了下面的代码,手动回车可以触发


BOOL CtestwindowDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
if(int(pMsg->wParam) == VK_ESCAPE || int(pMsg->wParam) == VK_RETURN )
{
if(MessageBox(_T("要退出吗?"),_T(""),MB_YESNO)==IDYES)
{
CDialog::OnClose();
}
else
{
return TRUE;
}
}

}
return CDialog::PreTranslateMessage(pMsg);
}
...全文
153 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
谁能顶一下啊
[/Quote]
顶一下
Lactoferrin 2012-05-21
  • 打赏
  • 举报
回复
因为SendMessage发的不会由GetMessage返回,因此不会经过PreTranslateMessage
grf9527 2012-05-21
  • 打赏
  • 举报
回复
谁能顶一下啊
grf9527 2012-05-21
  • 打赏
  • 举报
回复
甚至这样都可以
::PostMessage(pMainWnd->m_hWnd,WM_KEYDOWN,VK_RETURN,VK_RETURN);
grf9527 2012-05-21
  • 打赏
  • 举报
回复
DWORD g_ThreadID;
g_ThreadID = GetWindowThreadProcessId(pMainWnd->m_hWnd,&g_processID);

::PostThreadMessage(g_ThreadID,WM_KEYDOWN,13,13);


上面的发送代码就可以发送了,奇怪啊,sendmessage 难道就没有发送成功

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧