【问题标题】:MFC Rich Edit Control 2.0 receiving click eventMFC Rich Edit Control 2.0接收点击事件
【发布时间】:2017-01-31 04:09:48
【问题描述】:

我希望有人能帮助我解决我遇到的困境。本质上,我有一个 Checkbox 和一个 RichEditControl 并排。我希望能够知道用户何时单击了我的 RichEditControl,这样我就可以向我的复选框发送一条消息以将其标记为打开和关闭。

起初我试图用空文本覆盖我的复选框,以充当我的 RichEditControl 的“空白”背景,这样我就不必担心左右发送消息了。无论我尝试什么,“空白”背景都会与 RichEditControl 文本重叠并使其完全空白。

我在这里搜索了一些帮助,我找到了this,这正是我遇到的。我明白他在说什么,但不具备实施他们所说的话的知识。

现在我正在使用 EN_LINK 来尝试捕获一条消息,这样我就可以告诉我的复选框来标记自己。

BEGIN_MESSAGE_MAP(TempInit, CDialog)
ON_NOTIFY(EN_LINK, IDC_TempInitMsg, &TempInit::OnEnLinkTempinitmsg)
END_MESSAGE_MAP()

void TempInit::OnEnLinkTempinitmsg(NMHDR *pNMHDR, LRESULT *pResult)
{
ENLINK *pEnLink = reinterpret_cast<ENLINK *>(pNMHDR);
// TODO: Add your control notification handler code here
    // TODO: Add your control notification handler code here
    radioClicked = !radioClicked;
    if (radioClicked == true)
    {
        GetParent()->SendMessage(WM_MYRADIOCLICKED, CHECKENABLED, 0);
    }
    else
    {
        GetParent()->SendMessage(WM_MYRADIOCLICKED, CHECKDISABLED, 0);
    }
}
*pResult = 0;
}

如果这完全是错误的处理方式,我很抱歉。我已经在谷歌上搜索了几个小时,却空手而归。如果有人有任何其他方法,请尽可能帮助我。如果上面的内容还不够,我可以发布更多代码。

【问题讨论】:

  • getfocus 和 killfocus 消息能解决您的问题吗?
  • 这是您尝试解决的问题、您提出的解决方案以及您的解决方案所产生的问题的完美结合。很难说,哪个是哪个。起初我认为您的第一段是您的实际问题,但随后您发布了另一个问答的链接,该链接(大概)正在处理一个完全不同的问题。你最终想要完成什么?
  • 很抱歉给您带来了困惑!我提供的链接是相似的,但不是同一个问题是我应该说的。我的计划是能够单击 RichEditControl 文本并告诉我的复选框来标记自己打开和关闭。我尝试让复选框包含空文本并将其“隐藏”在 RichEditControl 文本下,但是一旦用户将鼠标悬停在“隐藏和空”字段上,它就会与文本重叠,从而将其留空
  • @ChristianAbella 我实际上已经尝试在复选框上使用它,但我无法得到任何确定的工作。虽然我可以再试一次,但也许我需要更多地使用这些属性
  • 您是否只想在单击 Rich Edit Ctrl 时选中复选框,而在 Rich Edit Ctrl 失焦时取消选中复选框?你想达到什么目的?

标签: c++ checkbox visual-studio-2015 mfc cricheditctrl


【解决方案1】:

史蒂文,

解决此问题的一种方法是处理来自富编辑控件的EN_MSGFILTER 通知。我无法为您提供任何代码来向您展示如何立即执行此操作,但 here's 丰富的编辑控件生成的通知消息的文档。只需按照与单选按钮相同的方式处理即可。

【讨论】:

  • 嗨约翰,我一直在阅读,通常他们会发布一个“示例”,所以我可以从一些东西开始,但我只是不明白如何实现他们所说的。我会尝试在几个小时内发布我尝试过的内容,所以也许你可以指出我正确的方向
【解决方案2】:

这将在 Rich Edit Ctrl 获得焦点并取消选中时选中复选框 当它失去焦点时。

BEGIN_MESSAGE_MAP(TempInit, CDialogEx)
  ON_EN_SETFOCUS(IDC_RICHEDIT21, &TempInit::OnEnSetfocusRichedit21)
  ON_EN_KILLFOCUS(IDC_RICHEDIT21, &TempInit::OnEnKillfocusRichedit21)
END_MESSAGE_MAP()

void CMFCApplication1Dlg::OnEnSetfocusRichedit21()
{
  CButton* pCheckBox = (CButton*)GetDlgItem(IDC_CHECK1);
  pCheckBox->SetCheck(1);
}

void CMFCApplication1Dlg::OnEnKillfocusRichedit21()
{
  CButton* pCheckBox = (CButton*)GetDlgItem(IDC_CHECK1);
  pCheckBox->SetCheck(0);
}

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 2011-09-19
    • 1970-01-01
    • 2016-09-12
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多