使Duilib中的RichEdit支持TextChanged事件



在duilib开发中,为了获取输入框内容的变化,需要响应TextChanged事件,由于在某些场景下需要使用RichEdit,而在duilib中CRichEditUI不能响应TextChanged事件。下面通过简单几行代码让RichEdit支持文字变化事件。

在UIRichEdith.cpp文件中搜索::OnTxNotify,然后使用以下代码替换此函数:

void CRichEditUI::OnTxNotify(DWORD iNotify, void *pv)
{
    switch(iNotify)
    { 
    case EN_CHANGE:
        {
            GetManager()->SendNotify(this, DUI_MSGTYPE_TEXTCHANGED);
            break;
        }
    case EN_DROPFILES:   
    case EN_MSGFILTER:   
    case EN_OLEOPFAILED:   
    case EN_PROTECTED:   
    case EN_SAVECLIPBOARD:   
    case EN_SELCHANGE:   
    case EN_STOPNOUNDO:   
    case EN_LINK:   
    case EN_OBJECTPOSITIONS:   
    case EN_DRAGDROPDONE:   
        {
            if(pv) 
            {   
                LONG nId =  GetWindowLong(this->GetManager()->GetPaintWindow(), GWL_ID);   
                NMHDR  *phdr = (NMHDR *)pv;   
                phdr->hwndFrom = this->GetManager()->GetPaintWindow();   
                phdr->idFrom = nId;   
                phdr->code = iNotify;  

                if(SendMessage(this->GetManager()->GetPaintWindow(), WM_NOTIFY, (WPARAM) nId, (LPARAM) pv))   
                {   
                }   
            }    
        }
        break;
    }
}
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

然后,在使用CRichEditUI的类中,调用CRichEditUI中的SetEventMask()函数,传递参数为ENM_CHANGE,这样CRichEditUI就支持TextChanged通知事件了。

你可能感兴趣的:(编程)