Re: Как контрол заставить посылать сообщение?
От: WoldemaR Россия  
Дата: 25.02.03 18:43
Оценка: 11 (3)
Здравствуйте, Случай, Вы писали:

С>На форме есть 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.