Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование на WinApi, C++Builder, Visual C++


Информационный Канал Subscribe.Ru


Выпуск №2-2003 BCBDEV.BY.RU

Здравствуйте уважаемые подписчики!

Извините за такую большую задержку в выходе рассылки.
Хочу сообщить Вам пару новостей.
Первая заключается в том, что старый сайт (winapi.by.ru) больше не поддерживается. Этот сайт в ближайшее время будет объединен с сайтом BcbDev.ru. На этом сайте будет выложена обновленная версия перевода справки MSDN в OnLine варианте, и переделана справка в формате CHM, выходившая там ранее. Все статьи и переводы теперь будут публиковаться именно на новом сайте. В этой рассылке остаются только статьи по WinApi. Переводы функций будут выходить в официальной рассылке сайта BcbDev.ru.
Вторая заключается в том, что рассылка начинает выходить в другом режиме. Так как статьи каждый день не попишешь, рассылка будет выходить по мере написания статей. Это может быть как два раза в неделю, раз в неделю или даже раз в две недели. В описании рассылки будет указано, что рассылка выходит нерегулярно.

Ну и в заключение сказанного небольшая статья:

Изменение надписей у кнопок стандартных диалогов

Иногда требуется изменить надпись на кнопках стандартного диалога. Например, изменить надпись у кнопки «Открыть» в диалоге открытия файлов. Это может понадобиться, например, в том случае, когда Вы хотите использовать кнопку не по прямому назначению, а для, скажем, удаления выбранного файла. Согласитесь надпись «Удалить» была бы в данном случае более уместна, чем надпись «Открыть». Изменить надпись довольно просто. Это можно сделать следующими способами:

Win32API:

Требуется установить процедуру ловушки для диалога.
Для этого при создании диалога требуется указать флаг OFN_ENABLEHOOK:
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(OPENFILENAME))
....
ofn.Flags = OFN_ENABLEHOOK|OFN_EXPLORER;
и, собственно установить саму ловушку:
ofn.lpfnHook = reinterpret_cast<LPOFNHOOKPROC>(OFNHookProc);

Сама процедура может выглядеть следующим образом:

UINT CALLBACK OFNHookProc(HWND hDlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
    LPOFNOTIFYEX lpon = reinterpret_cast<LPOFNOTIFYEX>(lParam);
    switch(uiMsg)
    {
        case WM_INITDIALOG:
            break;
        case WM_DESTROY:
            break;
    }
    return 0;
}
Или так как Вам надо.
     Теперь требуется переопределить надпись на кнопке. Для этих целей требуется определить дескриптор окна диалога и идентификатор нужной кнопки. Для определения дескриптора окна используется функция GetParent. Подробнее о этой функции вы можете прочитать в справке на сайте. Для определения идентификатора кнопки можно использовать следующий способ. Открыть файл COMDLG32. DLL в редакторе ресурсов VisualC. Найти нужный диалог и узнать требуемый идентификатор. В моем случае кнопка «Открыть» имела идентификатор «1», кнопка «Отмена» 2.
       После того, как Вы узнаете требуемую информацию можно начинать творить дальше. Все изменения в диалоге нужно вносить во время его создания, точнее до того как он будет отображен на экране. По этому внесем несколько изменений в процедуру ловушки. Для этого инициализации диалога будем определять дескриптор диалога и менять название на кнопке:
case WM_INITDIALOG:
     hWndDlg =  ::GetParent(hDlg);
     hWndBtn = GetDlgItem(hWndDlg, 1);
     SetWindowText(hWndBtn, "&Удалить");
break;

С++Builder:

В этом случае всё банально до ужаса. Нам просто требуется в процедуре OnShow диалога вставить две строчки:
HWND hWndDlg = GetParent(OpenDialog1->Handle);
HWND hWndBtn = GetDlgItem(hWndDlg, 1);
SetWindowText(hWndBtn, "&Удалить");

Изменение надписей у других диалогов также не представляет труда. Для этого требуется лишь дескриптор диалога и идентификатор того элемента, который вы хотите изменить.

Удачи Вам в Ваших делах Куковинец Андрей aka Juggernaut

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное