Сообщений 0    Оценка 15        Оценить  
Система Orphus

Класс CButtonEx

Автор: Serge Kandakov
ТВК
Опубликовано: 26.03.2002
Исправлено: 13.03.2005
Версия текста: 1.0

Исходный текст функции - 3 Kb
Демонстрационный пример - 76 Kb


Demo CButtonEx

CButtonEx позволяет создавать "плоские" кнопки с картинками и\или текстом. Класс CButtonEx является наследником CBitmapButton, входящего в WTL 3.1. и, поэтому, наследует все основные свойства (трэкинг мыши, поддержка подсказок и т.д) от своего предка, плюс к этому, умеет отображать как отдельный текст кнопки, так и текст с картинкой. Также корректно, в отличии от CBitmapButton, отображает "disabled mode" кнопки, если для него не установлено изображение.

ИСПОЛЬЗОВАНИЕ КЛАССА ВОЗМОЖНО ТОЛЬКО В WTL-ПРОЕКТАХ!

Использование класса

Перво-наперво необходимо включить заголовочный файл CButtonEx.h в проект и объявить экземпляр класса в диалоговом окне:

#include "CButtonEx.h"

class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
    enum { IDD = IDD_MAINDLG };

    BEGIN_MSG_MAP(CMainDlg)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
        COMMAND_ID_HANDLER(IDOK, OnOK)
        COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
    END_MSG_MAP()

...
...
private:
    CButtonEx m_b1;
};

Затем, в функции инициализации окна, вызвать метод SubclassWindow. Это является обязательным действием.

LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
...
...
    // Обязательное действие
    m_b1.SubclassWindow(GetDlgItem(IDC_BUTTON1));

    // Дополнительные действия
    m_b1.CreateImages(IDB_BITMAP1, 24, 2, 0x00ff00ff);
    m_b1.SetImages(0);
    return TRUE;
}

Описание методов

Метод SubclassWindow

BOOL SubclassWindow(HWND hWnd)

Подменяет функцию обработки сообщений на встроенную в CBitmapButton

Метод SetExtendedStyle

DWORD SetExtendedStyle(DWORD dwExtendedStyle, DWORD dwMask)

Модифицирует расширенный стиль кнопки.

Класс CButtonEx, помимо расширенных стилей CBitmapButton, имеет 7 дополнительных.

BTNEX_HCENTERцентровать изображение по горизонтали
BTNEX_VCENTERцентровать изображение по вертикали
BTNEX_LEFTIMAGEотображать картинку слева, а текст - справа
BTNEX_RIGHTIMAGEотображать картинку справа, а текст - слева
BTNEX_TOPIMAGEотображать картинку вверху, а текст - внизу
BTNEX_BOTTOMIMAGEотображать картинку внизу, а текст - вверху
BTNEX_CHECKBUTTONпереводит кнопку в режим "check button"
ПРИМЕЧАНИЕ
Направления указаны друг относительно друга (текст/картинка).

По умолчанию, в конструктор класса передается следующая комбинация расширенных стилей: BMPBTN_AUTO3D_SINGLE | BMPBTN_HOVER | BTNEX_VCENTER | BTNEX_HCENTER | BTNEX_LEFTIMAGE

Метод SetFont

void SetFont(HFONT hFont)

Устанавливает шрифт для отображения текста.

Метод SetTextColor

void SetTextColor(COLORREF crText)

Устанавливает цвет отображения текста.

Метод CreateImages

BOOL CreateImages(_U_STRINGorID bitmap, int cx, int nGrow, COLORREF crMask)

Инициализирует внутренний экземпляр типа CImageList. По параметрам, функция идентична CImageList::Create. По умолчанию используется системный ImageList, однако, если, по какой-то причине, вы не хотите его использовать, то можете определить макрос, который позволяет использовать встроенный СMaskedImage.

#define _BTNEX_SELFIMAGELIST_
Поддерживаются изображения с любой глубиной цвета.

Метод IsChecked

BOOL IsChecked()

Проверяет, в каком состоянии находится кнопка. Имеет смысл, только при установленном стиле BTNEX_CHECKBUTTON.

Метод SetChecked

void SetChecked(BOOL bCheck = true)

Устанавливает состояние кнопки. Имеет смысл, только при установленном стиле BTNEX_CHECKBUTTON.

ПРИМЕЧАНИЕ
Выше описаны только те функции, которые были добавлены или изменены. За более подробной информацией обращайтесь к описанию CBitmapButton в документации по WTL

Так же, для предотвращения миганий во время перерисовки, можно определить макрос
#define _BTNEX_MEMPAINT_
В этом случае функция отрисовки будет производить все действия в памяти, а по окончании работы "перебрасывать" результат на экран одним махом.

Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 0    Оценка 15        Оценить