gpt4 book ai didi

c++ - CRichEditCtrl 如何知道已执行粘贴操作?

转载 作者:太空狗 更新时间:2023-10-29 22:53:30 25 4
gpt4 key购买 nike

它有诸如 CRichEditCtrl::Copy()CRichEditCtrl::Paste() 之类的方法,您可以调用这些方法,但我无法发现控件的任何消息Windows 发送通知它执行粘贴操作。有谁知道这样的事情是否存在?还是 CRichEditCtrl 做一些较低级别的事情,比如监视 WM_CHAR 事件?如果是这样,我可以重复使用任何内部方法,还是只需要滚动自己的方法来覆盖标准粘贴功能?

我真正想要的是让我的自定义子类 (CMyRichEditCtrl : CRichEditCtrl) 忽略粘贴到控件的文本的任何格式。in。通过以不同的剪贴板格式获取剪贴板数据,或者通过正常粘贴它并立即删除插入文本的格式。

到目前为止我尝试了什么:

  1. CMyRichEditCtrl::PreTranslateMessage() 中检查 WM_PASTE 的消息
  2. 创建方法 virtual void CMyRichEditCtrl::Paste()
  3. 在 afxcmn.inl 中的 CRichEditCtrl::Paste() 上放置断点
  4. 转储通过 CMyRichEditCtrl::PreTranslateMessage()
  5. 每条 消息

结果:

1: 没有看到 WM_PASTE 消息
2: 它从未被调用
3:它从来没有被击中……如何?
4:控件从不接收任何 WM_COMMAND、WM_PASTE 或与焦点相关的消息。基本上只有鼠标移动和按键消息

似乎其他人实际上已经成功地做到了这一点。我想知道此时是否我的 MFC 版本或其他什么东西搞砸了。

最佳答案

处理 EN_PROTECTED 消息。

ON_NOTIFY_REFLECT(EN_PROTECTED, &YourClass::OnProtected)

// call this from the parent class
void YourClass::Initialize()
{
CHARFORMAT format = { sizeof(CHARFORMAT) };
format.dwEffects = CFE_PROTECTED;
format.dwMask = CFM_PROTECTED;

SetDefaultCharFormat(format);
SetEventMask(ENM_PROTECTED);
}

void YourClass::OnProtected(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;

ENPROTECTED* pEP = (ENPROTECTED*)pNMHDR;
if (pEP->msg == WM_PASTE)
pResult = 1; // prevent paste
}

关于c++ - CRichEditCtrl 如何知道已执行粘贴操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2250759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com