代码之家  ›  专栏  ›  技术社区  ›  Mark

ENéPROTECTED和RichEdit

  •  0
  • Mark  · 技术社区  · 15 年前

    尝试更改“受保护”文本时,受EN_保护的通知消息将发送到富编辑控件的父级。这对我很有用,我已经尝试过用richedit20和richedit50。对此受保护文本的任何更改都会立即触发受EN_保护的邮件。(设置它有点复杂,但我做得很正确。)

    但是,文档中说,如果父级返回非零以响应EN_受保护的消息,它将阻止更改受保护的文本。这对我没用。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Ruddy    15 年前

    我创建了一个简单的测试对话框测试应用程序,使用MFC-通过dialog edit添加richedit控件,添加了对 AfxInitRichEdit SetWindowText )第二个字 CFE_PROTECTED 效果,然后为添加处理程序 EN_PROTECTED ,在我刚刚设置的处理程序中 *pResult = TRUE .

        2
  •  0
  •   Mark    15 年前

    (致Ruddy:下面的代码示例,如果它揭示了什么)

    最后,我只是在EN_保护的处理程序中做了一个PostMessage(hwnd,EM\u UNDO…),这就是我必须要做的,才能让这个为我工作。返回TRUE从来没有完成任何事情,尽管我知道处理程序正在被命中,并且只针对受保护的文本。(下面的ODS函数是OutputDebugString)。

    但是我在web上看到了多个例子(大多数都是MFC或者DELPHI之类的),其中只在受EN_保护的处理程序中返回TRUE就可以阻止更改。

    实际上,我的富编辑控件在一个对话框中,但是是用CreateWindowEx创建的,所以我尝试通过RC文件初始化它,但是没有什么区别。(我所做的一些事情确实有点老派——对此很抱歉)但事实上,我尝试了任何事情来让EN_受保护的工作像它的文档一样,但没有任何工作——奇怪。

    原始代码(添加了EM_UNDO调用):

    case WM_NOTIFY: {
    
      NM_UPDOWN* nm = (NM_UPDOWN*)lParam;
      if ((nm->hdr.code == UDN_DELTAPOS) && (nm->hdr.idFrom == ID_UPD_ERR)) {
        int e = nm->iPos + nm->iDelta;
        SetWindowText(xml2->hStatMsg[1],xml2->ErrMsg(1,e));
        SetWindowText(xml2->hStatMsg[2],xml2->ErrMsg(2,e));
      }
      else if (wParam == ID_EDIT_A) {
        if (((LPNMHDR)lParam)->code == EN_PROTECTED) {
          ODS("EN_PROTECTED", (int)((ENPROTECTED*)lParam)->msg); 
          PostMessage(xml2->hImgXml2,EM_UNDO,0,0);
          return TRUE;
        }
        if (((LPNMHDR)lParam)->code == EN_SELCHANGE) {
          anchors_adjsel(xml2->hImgXml2);
    
        }      
      }
    
    }
    break;