CFolderDialog SetStatusText

CFolderDialog SetStatusText

本文关键字:SetStatusText CFolderDialog      更新时间:2023-10-16

我有一个CFolderDialog,我想设置一些文本。我试过从它派生另一个类,并在初始化时设置文本,但它似乎不起作用。下面是示例:

class BackupLocationDialog : public CFolderDialog
{
public:
    void BackupLocationDialog::OnInitialized()
    {
        BackupLocationDialog::SetStatusText(_T("A HORSE"));
    }
};

不幸的是,它似乎不起作用。有什么想法吗?

这是一个很好的例子CFolderDialog -选择文件夹,你可以在这里找到如何设置文本。只要下载源代码打开folderdlog .cpp,我希望你能找到答案。

请注意FolderDlg.cpp文件中的这部分代码:

VOID CFolderDialog::SetStatusText( IN LPCTSTR pszText )
{
    ASSERT( m_hWnd != NULL );
    ::SendMessage( 
        m_hWnd, BFFM_SETSTATUSTEXT, 
        (WPARAM)0, (LPARAM)pszText
    );
}

你可能想看看这个链接:http://msdn.microsoft.com/en-us/magazine/cc163789.aspx

FolderPick派生了一个新的类,CMyFolderDialog,覆盖了OnInitialized和OnValidateFailed。当对话框初始化时,FolderPick设置状态文本,并将OK按钮的名称更改为"选择我!"

void CMyFolderDialog::OnInitialized()
{
   SetStatusText(_T("Nice day, isn't it?"));
   SetOKText(L"Choose Me!");
}

这里有一些东西需要下划线。首先,CFolderDialog有像SetStatusText和SetOKText这样的包装器,用于文件夹对话框消息,比如BFFM_SETSTATUSTEXT和BFFM_SETOKTEXT。

如果你用C语言编程,你会调用::SendMessage;使用CFolderDialog,您只需调用包装器。唯一的警告是,你只能从你的虚拟通知处理程序(OnInitialized, OnSelChanged等)中调用这些包装器,因为m_hWnd只有在文件夹对话框实际运行时才有效,而不是在调用BrowseForFolder之前或之后。

内部,CFolderDialog在它的回调函数第一次收到通知时子类化了文件夹对话框。第二件要注意的事情是,一些BFFM_消息需要Unicode字符串,而不是lpctstr。这就是为什么代码片段中的"Choose Me!"是一个宽字符串(以L为前缀)。

微软文档有几个小错误,我应该指出,如果你试图编程的SHBrowseForFolder在C.文档说传递字符串的BFFM_SETOKTEXT在WPARAM;实际上是LPARAM。它还说BFFM_SETSELECTION需要一个Unicode字符串,但是BFFM_SETSELECTION在a和W两种口味中都可用,所以您可以使用LPCTSTR。