Код, который вы показали, не должен даже компилироваться. Функция GetForegroundWindow
, предоставляемая MFC, не возвращает HWND
, поэтому вы не можете инициализировать переменную hwnd
, используя ее возвращаемое значение.
Если вы хотите получить HWND
, вам нужно вызвать GetForegroundWindow
из Windows API, экранируя вызов с помощью ::
, как вы это сделали для GetWindowText
. Поэтому просто перепишите ваш код следующим образом:
void CMyDlg::OnKillFocus( CWnd* pNewWnd )
{
CDialog::OnKillFocus(pNewWnd);
if(m_bSelectorModeActive)
{
HWND hwnd(::GetForegroundWindow());
TCHAR buf[512];
::GetWindowText(hwnd, buf, 512);
MessageBox(buf);
}
}
Кроме того, глядя на ваш код, вы удивляетесь тому, что вы, похоже, игнорируете объектно-ориентированную MFC, поэтому смиренно пытаетесь привнести ее в Windows API. Вам не нужно работать напрямую с оконными ручками. И можно утверждать, что наиболее веская причина использовать MFC - это класс CString
. Нет никакой причины, по которой вам больше придется иметь дело с массивом TCHAR
s. Я мог бы написать это вместо:
void CMyDlg::OnKillFocus( CWnd* pNewWnd )
{
CDialog::OnKillFocus(pNewWnd);
if(m_bSelectorModeActive)
{
CWnd* pForeWnd = GetForegroundWindow();
CString windowText;
pForeWnd->GetWindowText(windowText);
MessageBox(windowText);
}
}