Справочная информация:
- Создание CWnd с WS_EX_LAYERED и GetDesktopWindow () в качестве родителя
- Создать CDialogEx с многоуровневым окном в качестве родительского
- Добавьте кнопку в диалоговом окне и используйте DDX_Control, чтобы сделать ее CMFCButton
Проблема:
Щелкните внутри области многослойного окна, чтобы у диалогового окна не было фокуса, затем попытайтесь нажать на кнопку в диалоговом окне. Кнопка не будет реагировать на событие.
Примечания:
Если кнопка просто CButton, то она работает нормально. Можно сказать, что диалог должен иметь фокус, чтобы это работало, но это не так в любом другом сценарии. В общем, когда я нажимаю кнопку в диалоговом окне, оно всегда работает, даже если мой фокус ранее был в совершенно другой программе.
Код:
Функция создания для многослойного окна:
bool CLayerWnd::Create()
{
if (!__super::CreateEx(WS_EX_LAYERED, DEMOLAYEREDCLASS, _T("Layered Window"), WS_POPUP, 200, 200, 500, 500, ::GetDesktopWindow(), NULL))
return false;
m_childDlg.Create(this);
m_childDlg.ShowWindow(SW_SHOW);
ShowWindow(SW_SHOW);
DrawWindow();
return true;
}
Функция создания для диалога:
bool CChildDlg::Create(CWnd *pParentWnd)
{
if(!__super::Create(CChildDlg::IDD, pParentWnd))
return false;
return true;
}
Демонстрационный проект VS2015:
https://www.dropbox.com/s/ha8o13hfz2kfn97/LayerDemo.zip?dl=0