【问题标题】:EN_PROTECTED and RichEditEN_PROTECTED 和 RichEdit
【发布时间】:2010-01-20 20:43:28
【问题描述】:

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

但是,文档说如果父级在响应 EN_PROTECTED 消息时返回非零,它将阻止受保护的文本被更改。这对我不起作用。

【问题讨论】:

  • 您可以将源代码发布到您的 EN_PROTECTED 处理程序吗?

标签: winapi controls edit


【解决方案1】:

我创建了一个简单的测试对话框测试应用程序,使用 MFC - 通过对话框编辑添加 Richedit 控件,在应用程序初始化中添加了对 AfxInitRichEdit 的调用,在对话框中添加了一些代码以将文本放入控件中(@ 987654322@),选择第二个词,应用CFE_PROTECTED 效果,然后为EN_PROTECTED 添加处理程序,在处理程序中我刚刚设置*pResult = TRUE

当我运行应用程序时,一切正常;因为我无法修改受保护的字词,但我可以修改文本的其余部分。

不幸的是,这并没有让我们得出关于为什么您的代码不起作用的结论性原因——据我所知,它似乎是正确的。我想可能是 RichEdit20 dll 的版本 - 我的是 5.31.23.1224

【讨论】:

    【解决方案2】:

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

    我最终只是在 EN_PROTECTED 处理程序中做了一个 PostMessage(hwnd,EM_UNDO...) ,这就是我必须做的才能让它为我工作。返回 TRUE 从未完成任何事情,尽管我知道处理程序被击中并且仅用于受保护的文本。 (下面的ODS函数是OutputDebugString)。

    但是我在网上看到了多个示例(大多数是 MFC,但有时是 DELPHI 或其他),据说在 EN_PROTECTED 处理程序中返回 TRUE 可以防止更改。

    实际上,我的 Rich Edit Control 是在一个对话框中,但是是使用 CreateWindowEx 创建的,所以我尝试通过 RC 文件对其进行初始化,但没有任何区别。 (诚​​然,我正在做的一些事情有点老派 - 对此感到抱歉。)但实际上我尝试了任何一切来使 EN_PROTECTED 像它记录的那样工作并且没有任何工作 - 奇怪。

    哦,好吧,EN_PROTECTED 处理程序中的 EM_UNDO 有效,所以我想我会坚持下去。

    原始代码(添加了 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;
    

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2021-12-14
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多