ActiveX с нуля

Как изменить код при использовании пользовательского свойства шрифта.


Вы должны изменить код вручную, чтобы добавленное  Вами свойство использовалось правильно.

В файл (.H) добавьте переменную:

protected:

CFontHolder m_fontHeading;

В файле (.CPP):

·         Инициализируйте m_fontHeading в конструкторе:

CMyCtrlCtrl:: CMyCtrlCtrl

( ) : m_fontHeading( &m_xFontNotification )

{

    // [...тело конструктора...]

}

·         Объявите статическую структуру FONTDESC, содержащую параметры шрифта поумолчанию:

static const FONTDESC _fontdescHeading =



  { sizeof(FONTDESC), OLESTR("MS Sans Serif"), FONTSIZE( 12 ), FW_BOLD,

     ANSI_CHARSET, FALSE, FALSE, FALSE };

·         В методе DoPropExchange

добавьте вызов  PX_Font:

void CMyCtrlCtrl::DoPropExchange(CPropExchange* pPX)

{

    COleControl::DoPropExchange(pPX);

    // [...другие PX_ function ...]

    PX_Font(pPX, _T("HeadingFont"), m_fontHeading, &_fontdescHeading);

}

·         Закончите реализацию метода GetHeadingFont:

LPFONTDISP CMyCtrlCtrl::GetHeadingFont( )

{

    return m_fontHeading.GetFontDispatch( );

}

·         Закончите реализацию метода SetHeadingFont:

void CMyCtrlCtrl::SetHeadingFont( LPFONTDISP newValue )

{

    m_fontHeading.InitializeFont( &_fontdescHeading, newValue);

    OnFontChanged();    //Объявить об изменениях

    SetModifiedFlag( );

}

·         Измените метод OnDraw :

CFont* pOldHeadingFont;

pOldHeadingFont = SelectFontObject(pdc, m_fontHeading);

// рисование новым шрифтом

pdc->SelectObject(pOldHeadingFont);

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

PROPPAGEID(CLSID_CFontPropPage)

Вы должны также изменить число страниц в макросе BEGIN_PROPPAGEIDS:

BEGIN_PROPPAGEIDS(CMyCtrlCtrl, 2)



Содержание раздела