65.9K
CodeProject 正在变化。 阅读更多。
Home

MFC Feature Pack - CMFCEditBrowseCtrl

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (5投票s)

2009 年 4 月 20 日

CPOL

2分钟阅读

viewsIcon

79445

MFC Feature Pack - CMFCEditBrowseCtrl

CMFCEditBrowseCtrl?

这是一个特殊的编辑控件 (MFC Feature Pack VS2008),其右侧附加了一个浏览按钮。当我们点击这个按钮时,会弹出一个打开文件对话框或者打开文件夹对话框。请参考这个示例截图。

Browse edit control sample

浏览编辑控件示例

此外,这个控件允许我们通过重写类的 OnBrowse 函数来实现我们自己的事件处理。 这是一个很棒的控件,我非常喜欢它,因为我知道创建一个这样的控件有多么痛苦。

一些关于如何制作这样一个控件的提示...

  1. 处理 nc calcsize 事件,以便您可以指定浏览按钮所占据区域的大小,从而导致编辑控件调整其客户端区域以适应按钮。
  2. 处理 nc paint 以绘制按钮,此外,您还必须在开始时强制生成一次 nc calcsize 消息。
  3. 处理鼠标抬起和鼠标按下事件。

用法

  1. 您应该在 VS2008 SP1 或安装了 Feature Pack 的环境下工作。
  2. 向对话框添加一个编辑控件。
  3. 打开这个对话框类的 .h 文件,并添加一个成员变量 - CMFCEditBrowseCtrl m_EditBrowse;
  4. 打开 .cpp 文件,并在 DoDataExchange 中添加一个调用以子类化这个项目。
    DDX_Control( pDX, IDC_EDIT_FILEBROWSE, m_EditBrowse);
  5. 然后在 OnInitDialog 中...
    // Note: Only one of these calls will work at a time!
    m_EditBrowse.EnableFileBrowseButton(); // To show file open dialog
    m_EditBrowse.EnableFolderBrowseButton(); // To show folder browse dialog
    m_EditBrowse.EnableBrowseButton(); // To do custom event handling
  6. 就是这样,现在你已经成功地让浏览编辑控件工作了。 :)
  7. 请注意,上述调用采用了一些参数(具有默认值),请在 MSDN 中查找。

浏览按钮的自定义事件处理

这里有一个关于如何处理自定义浏览按钮事件处理的小例子,取自 MSDN 示例...

class CMyBrowseEdit : public CMFCEditBrowseCtrl
{
    virtual void OnBrowse()
    {
        MessageBox(_T("Browse item..."));
        SetWindowText(_T("New value!"));
    }
};

更多...

使用 SetBrowseButtonImage 来更改浏览按钮的图像,还可以选择维护这样的位图或图标。 还有一些更有用的虚拟函数...

  1. OnDrawBrowseButton - 重写以从您这边进行一些额外的绘画。
  2. OnChangeLayout - 当浏览按钮模式改变时调用,例如从文件夹模式到文件模式等等。(我猜是这样) :)

发布于 CodeProject, MFC 标签: CEdit, CMFCEditBrowseCtrl, Extending edit controls, MFC Feature Pack

© . All rights reserved.