首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将控件添加到CFileDialog

将控件添加到CFileDialog
EN

Stack Overflow用户
提问于 2013-12-05 21:08:13
回答 1查看 1.9K关注 0票数 1

如何在CFileDialog上添加一个简单的复选框?

MFC似乎有一个函数CFileDialog::AddCheckButton,不幸的是它没有在WTL中实现。

这些缺失的特性(我觉得是初级的)越来越让人讨厌。还是WTL不适合我?

EN

回答 1

Stack Overflow用户

发布于 2013-12-07 01:08:08

这并不是最基本的。CFileDialog并不完全是这个功能的实现,而是OPENFILENAME和朋友标准应用程序接口的包装器。可以更改布局和添加控件,但请记住,这是通过挂钩/子类化窗口并通过Win32应用程序接口添加控件和消息处理程序来实现的。

WTL不提供用于定制的助手方法,但它在内部启用挂钩(初始化lpfnHook并将其映射到WTL标准StartDialogProc对话框过程),以帮助您快速入门。你应该从这个类派生,覆盖消息处理,你可以从那里开始你的定制。

还要注意的是,这是一个基于过时API的包装器。WTL还为您提供了更新的东西:CShellFileOpenDialogCShellFileSaveDialog

代码片段

下面是扩展类的方式:

代码语言:javascript
复制
#include <atlmisc.h>

class CMyFileDialog :
    public CFileDialogImpl<CMyFileDialog>
{
public:

BEGIN_MSG_MAP(CMyFileDialog)
    CHAIN_MSG_MAP(CFileDialogImpl<CMyFileDialog>)
    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
    COMMAND_HANDLER(123, BN_CLICKED, OnTestClicked)
END_MSG_MAP()

private:
    CButton m_Button;

public:
// CMyFileDialog
    CMyFileDialog() :
        CFileDialogImpl<CMyFileDialog>(TRUE)
    {
    }

// Window Message Handler
    LRESULT OnInitDialog(UINT, WPARAM, LPARAM, BOOL& bHandled)
    {
        CRect Position;
        ATLVERIFY(GetWindowRect(Position));
        ATLVERIFY(SetWindowPos(NULL, 0, 0, Position.Width(), Position.Height() + 50, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE));
        CRect ButtonPosition;
        ButtonPosition.left = 10;
        ButtonPosition.top = Position.Height() + 10;
        ButtonPosition.right = 90;
        ButtonPosition.bottom = ButtonPosition.top + 20;
        m_Button.Create(m_hWnd, ButtonPosition, _T("Test"), CControlWinTraits::GetWndStyle(0), CControlWinTraits::GetWndExStyle(0), 123);
        bHandled = FALSE;
        return 0;
    }
    LRESULT OnTestClicked(UINT, INT, HWND, BOOL&)
    {
        AtlMessageBox(m_hWnd, _T("Test"), _T("Debug"), MB_ICONINFORMATION | MB_OK);
        return 0;
    }
};

然后你就可以做到:

代码语言:javascript
复制
    CMyFileDialog Dialog;
    Dialog.DoModal(m_hWnd);

你把控制权放在底部:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20400872

复制
相关文章

相似问题

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