Здравствуйте, Случай, Вы писали:
С>На форме есть RichEdit. ClassWizard`ом добавляю обработчик на событие NM_CLICK:
С>void CSomeDlg::OnClickRichedit1(NMHDR* pNMHDR, LRESULT* pResult)
С>{
С> // TODO: Add your control notification handler code here
С>
С> *pResult = 0;
С>}
С>
Так вот этот обработчик никогда не вызывается. Получается данный контрол не посылает сообщения. Как это обойти?
RichEdit шлёт родителю все мышиные и клавиатурные сообщения как уведомление EN_MSGFILTER.
Но для их получения надо установить маску сообщений:
BOOL CYouDlg::OnInitDialog()
{
m_RichEditCtrl.SetEventMask(m_RichEditCtrl.GetEventMask() | ENM_MOUSEEVENTS);
...
Затем ClassWizard`ом добавляете обработчик EN_MSGFILTER:
void CYouDlg::OnMsgfilterRichedit1(NMHDR* pNMHDR, LRESULT* pResult)
{
MSGFILTER *pMsgFilter = reinterpret_cast<MSGFILTER *>(pNMHDR);
// TODO: The control will not send this notification unless you override the
// CDialog::OnInitDialog() function to send the EM_SETEVENTMASK message
// to the control with either the ENM_KEYEVENTS or ENM_MOUSEEVENTS flag
// ORed into the lParam mask.
// TODO: Add your control notification handler code here
if (pMsgFilter->msg == WM_LBUTTONUP)
{
А здесь творите всякие безобразия.
}
*pResult = 0;
}