小弟我通过findwindow找到一个窗口后,向那个窗口发送回车消息,这样发送对不对
我通过findwindow找到一个窗口后,向那个窗口发送回车消息,这样发送对不对
下面的代码无法触发带二段代码执行,但是成功的把第二个窗口设置成活动窗口,并且放在了顶层
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);
}
------解决方案--------------------
因为SendMessage发的不会由GetMessage返回,因此不会经过PreTranslateMessage
------解决方案--------------------
下面的代码无法触发带二段代码执行,但是成功的把第二个窗口设置成活动窗口,并且放在了顶层
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);
}
------解决方案--------------------
因为SendMessage发的不会由GetMessage返回,因此不会经过PreTranslateMessage
------解决方案--------------------