首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EN_PROTECTED和RichEdit

EN_PROTECTED和RichEdit
EN

Stack Overflow用户
提问于 2010-01-21 04:43:29
回答 2查看 852关注 0票数 0

当试图更改“受保护的”文本时,EN_PROTECTED通知消息将发送到丰富编辑控件的父级。这对我很有效,我已经在richedit20和richedit50上尝试过了。对此受保护文本的任何更改都会立即触发EN_PROTECTED消息。(设置它有点复杂,但我已经正确地完成了。)

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

EN

回答 2

Stack Overflow用户

发布于 2010-01-21 22:24:05

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

当我运行这个应用程序时,一切都运行得很好;因为我不能修改受保护的单词,但我可以修改文本的其余部分。

不幸的是,这并不能给我们一个确凿的理由来解释为什么你的代码不能工作--从我看来它看起来是正确的。可能是RichEdit20 dll的版本-我的是5.31.23.1224

票数 1
EN

Stack Overflow用户

发布于 2010-01-21 07:08:33

(给Ruddy:如果下面的代码样本揭示了什么的话)

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

但我在网上看到过很多例子(大多数都是MFC,有时也有DELPHI之类的),据说在EN_PROTECTED处理程序中只返回TRUE就可以阻止这种改变。

实际上,我的Rich Edit控件在一个对话框中,但是用CreateWindowEx创建的,所以我尝试通过RC文件初始化它,但没有什么不同。(无可否认,我正在做的一些事情有点老派--抱歉。)但实际上,我尝试了一切方法,让EN_PROTECTED像文档中描述的那样工作,但没有一件工作--很奇怪。

哦,好吧,来自EN_PROTECTED处理程序内部的EM_UNDO可以工作,所以我想我还是坚持使用它。

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

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2104809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档