【问题标题】:Is there a way to add my own button inside the edit common control?有没有办法在编辑公共控件中添加我自己的按钮?
【发布时间】:2015-06-27 19:58:39
【问题描述】:

假设我在基于 MFC 的对话窗口中有默认的 EDIT common control

我正在寻找一种在其中添加小“X”(或删除)按钮的方法(这是我需要的 Photoshop 渲染图):

有没有办法通过修改默认的编辑控件来做到这一点?

【问题讨论】:

  • 右边的那个按钮真的是上面提到的EDIT公共控件的一部分吗?您可以使用所有者绘图来实现您想要的。
  • @πάνταῥεῖ:我正在考虑以某种方式使用另一种常用控件,即 Button。所有者绘图的问题是......好吧,我自己绘制所有内容。这显然涉及视觉样式和主题等。使用已经定义的按钮,如果我能以某种方式将其显示在编辑控件的顶部,我可以消除所有这些,使 Edit ctrl 不绘制按钮所在的位置并限制右侧边缘按钮之前的编辑。
  • Insert buttons into an edit control 基本上就是你要找的东西。实质上,您将标准 Edit 控件子类化,并将标准 Button 控件放置在其非客户区中。只要你正确地subclass your control 你应该很高兴。
  • 恐怕像从其他控件元素组合的 UserControl 这样的东西本身不适用于 MFC,除非您使用 OLE、COM (ATL) 或 IIRC 等技术。
  • @IInspectable:谢谢。这就是我一直在寻找的。这并不像我想象的那么简单,但听起来是可行的。

标签: c++ windows winapi mfc gdi


【解决方案1】:

请考虑使用新类CMFCEditBrowseCtrl。它确实有方法 CMFCEditBrowseCtrl::EnableBrowseButton() 可以完全满足您的需求。

【讨论】:

    【解决方案2】:

    如果我想要多个按钮,我会研究替代方案:

    • 查看CMFCEditBrowseCtrl 类的代码。然后决定是否从中派生一个类并扩展;或者从 CEdit 派生,复制 CMFCEditBrowseCtrl 代码并扩展。

    • 如果编辑是多行的,我会研究方法CEdit::SetRectCEdit::SetRectNP。如果是单行的话,我会看CEdit::SetMargins。然后在编辑的文本区域上实现普通按钮。

    【讨论】:

      【解决方案3】:

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多