Я имею в виду статью msdn «Хостинг пользовательского элемента Windows Form в диалоговом окне MFC» [link] (http://msdn.microsoft.com/en-us/library/94t3ebxz.aspx), для повторного использования окна формируют пользовательские элементы управления в устаревшем приложении MFC. С помощью полезной утилиты DDX_ManagedControl я могу видеть, что элемент управления (класс MyPanel) включен в диалоговом окне, даже вкладки работают на 100%.Когда диалог MFC с элементом управления WinForms размещен внутри, деактивируется и снова активируется, а затем не отвечает
Затем я двигаюсь вперед, чтобы сделать диалог хостинга дочерним по отношению к другому модальному диалоговому окну, тогда проблема возникает, когда одно из текстовых полей на моей панели WinForms получает фокус клавиатуры, и я переключаюсь в другое окно приложения (другой процесс), чтобы отключить текущий диалог, в следующий раз, когда я снова активирую диалог MFC, он больше не отвечает.
Некоторые коды для выяснения проблемы: // в моем диалоговом окне дочернего элемента MFC CWinFormsControl m_ctrl1;
void CMyWinFormControlTab::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_ManagedControl(pDX, IDC_MYPANEL_STATIC, m_ctrl1);
}
//in my out-most modal dialog
BOOL CMFCAppTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CDialog *pNewTab = new CMyWinFormControlTab();
pNewTab->Create(IDD_MYWINFORMTAB, this);
pNewTab->ShowWindow(SW_SHOW);
}
Некоторые наблюдения:
- В случае выше, если я использую Spy ++ контролировать все WM_ACTIVATEXXX сообщение в текущем процессе, я нашел не WM_ACTIVATE или сообщения WM_ACTIVATEAPP не захвачена, когда проблематично деактивация и реактивация не происходит никаких сообщений, т. е. насос сообщений мертв.
- В отличие от обычного диалога MFC-child с элементами управления MFC, когда дезактивация и повторная активация происходят после того, как одно текстовое поле получает фокус, оно все равно отвечает, и я могу видеть все сообщения WM_ACTIVATEXXX.
- Если я непосредственно размещаю мой элемент управления WinForms в модальном диалоге MFC, проблема исчезла. Тем не менее, мне нужен промежуточный диалог модальности, поскольку в моем случае я использую TreeView, в котором каждый узел дерева загружает другой диалог без модальности.