Я пытаюсь реализовать Эта статья Но когда я смотрю на все сообщения, которые мой диалог имеет в представлении ресурсов (на вкладке сообщений), я не вижу этого сообщения. Любая идея, как это поймать (доступно? Это проблема IDE?) Спасибо, Дэни.
Отсутствует WM_WINDOWPOSCHANGING в диалоговом окне MFC VS 2012
Ответы (1)
Мастер классов MFC не показывает сообщения, для которых обработчик сообщений уже реализован в базовом классе CWnd
. Для обработки WM_WINDOWPOSCHANGING
все, что вам нужно сделать, это переопределить < a href="http://msdn.microsoft.com/en-us/library/xz5c4859.aspx" rel="nofollow">CWnd::OnWindowPosChanging
.
Обновление: я только что проверил, и моя установка Visual Studio 2012 (обновление 3) содержит список WM_WINDOWPOSCHANGING
для класса диалога. Если он не отображается, возможно, вы выбрали не тот класс в раскрывающемся списке Имя класса.
Если сообщение не отображается для вас в мастере классов по какой-либо причине, вы все равно можете реализовать его вручную. Мастер классов — это просто удобство, а не требование. MFC реализует обработку сообщений, создавая карту сообщений, которую можно расширить, добавление обработчиков сообщений с помощью макросов схемы сообщений.
Объявите обработчик сообщений с правильной подписью и именем в своем диалоговом классе. Обратите внимание, что макрос afx_msg
ничего не заменяет и служит только для документирования того, что это обработчик сообщений MFC.
afx_msg void OnWindowPosChanging(WINDOWPOS* lpwndpos);
Добавьте обработчик сообщений в карту сообщений вашего диалога:
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
...
ON_WM_WINDOWPOSCHANGING()
END_MESSAGE_MAP()
Макрос для использования, а также сигнатуру и имя функции можно найти на странице WM_ Messages. : Т – Я. С этим вы можете реализовать свой обработчик сообщений:
void CMyDialog::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
CDialogEx::OnWindowPosChanging(lpwndpos);
// TODO: Add your message handler code here
}
Обратите внимание, что реализация мастера классов (VS 2010 и выше) больше не требует специально отформатированных комментариев в исходном коде (как это было в VS6). Добавление обработчиков сообщений вручную не нарушает функциональность мастера классов.
WM_WINDOWPOSCHANGED
. Независимо от этого убедитесь, что вы выбрали класс диалога в разделе Имя класса в правом верхнем углу мастера создания классов.
- person IInspectable; 07.09.2013
Spy++
. - person Roman R.   schedule 07.09.2013WM_WINDOWPOSCHANGING
, и вы можете вызватьPostMessage()
из своего обработчикаWM_INITDIALOG
(или в вашем переопределенииOnInitDialog()
, если вы используете MFC). Можете ли вы сделать скриншот того, что вы видите во вкладке сообщений? - person Edward Clements   schedule 07.09.2013