CFolderDialog SetStatusText - PullRequest
       13

CFolderDialog SetStatusText

2 голосов
/ 18 ноября 2011

У меня есть CFolderDialog, и я хочу установить для него текст. Я пытался извлечь из него другой класс и установить текст при инициализации, но, похоже, он не работает. Вот образец:

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

К сожалению, это не похоже на работу. Есть идеи?

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

Вот хороший пример CFolderDialog - Выбор папок , здесь вы можете найти, как установить текст.Просто скачайте Исходный код , откройте FolderDlg.cpp, и я надеюсь, что вы найдете ответ.

Обратите внимание на эту часть кода в FolderDlg.файл cpp:

VOID CFolderDialog::SetStatusText( IN LPCTSTR pszText )
{
    ASSERT( m_hWnd != NULL );

    ::SendMessage( 
        m_hWnd, BFFM_SETSTATUSTEXT, 
        (WPARAM)0, (LPARAM)pszText
    );
}
0 голосов
/ 21 ноября 2011

вы можете проверить эту ссылку: http://msdn.microsoft.com/en-us/magazine/cc163789.aspx

...

FolderPick получает новый класс CMyFolderDialog с переопределениями для OnInitialized и OnValidateFailed.Когда диалоговое окно инициализируется, FolderPick устанавливает текст состояния и меняет имя кнопки «ОК» на «Выбери меня!»

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.Вот почему "Выбери меня!"во фрагменте находится строка широких символов (с префиксом L).

В документации Microsoft есть пара незначительных ошибок, на которые следует обратить внимание в случае, если вы попытаетесь запрограммировать SHBrowseForFolder на C. В документации написано, что нужно передать строкудля BFFM_SETOKTEXT в WPARAM;на самом деле, это LPARAM.В нем также говорится, что BFFM_SETSELECTION требуется строка Unicode, но BFFM_SETSELECTION доступна как в A, так и в W вариантах, поэтому вы можете использовать LPCTSTR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...