Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает свойство Back Ground Color. 
:(
    Опции темы
torero
Дата 18.12.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 177
Регистрация: 1.2.2006

Репутация: нет
Всего: нет



    Всё мучаю свой контрол ATL-ActiveX. С методами разобрался, работают. Добавленные свойства и страницы свойств тоже работают. Но есть ещё два способа изменения свойств.
  1. Когда создавал контрол, то в таблице "Свойства ATL Object Wizard" на вкладке Stock Properties, я задал свойство Back Ground Color. Теперь в контейнере, в свойствах контрола
    есть стандартная таблица свойств, где можно изменить цвет BackGround (на стадии проектирования контейнера ). В таблице цвет меняется, а у контрола нет. Есть ли известный
    механизм передачи цвета, чтобы можно  было его проверить?
    Что у меня вызывает подозрение, в интерфейсе есть такие операторы:
Код

    interface IFirstATL : IDispatch                                                     // FirstATL имя контрола
    {
        [propput, id(DISPID_BACKCOLOR)]
        HRESULT BackColor([in]OLE_COLOR clr);
        [propget, id(DISPID_BACKCOLOR)]
        HRESULT BackColor([out,retval]OLE_COLOR* pclr);
    };

    Здесь переменные для OLE_COLOR  clr и *pclr .
    Но в классе CFirstATL создана переменная цвета    OLE_COLOR m_clrBackColor;
    И нет связи между этими переменными. У кого работает изменение цвета, как у Вас эти переменные задейстьвованы? Может быть нужно мне самому вставить в OnDraw операторы
    закрашивания окна контрола? Это, конечно, можно сделать, но, наверно, не нужно.
    Ещё есть в классе CFirstATL оператор :    
                              PROP_ENTRY("BackColor", DISPID_BACKCOLOR, CLSID_StockColorPage) - здесь вроде бы всё правильно.
    А может быть в контейнере причина. Напишите, пожалуйста, как у вас дела с изменением Back Ground-а?
    Работаю в 6-ой студии, так-как для неё написаны учебники, чтобы не было ошибок перехода к 8-ой.  


Это сообщение отредактировал(а) Rrader - 19.12.2009, 14:21
PM MAIL   Вверх
kurlyak
Дата 24.3.2010, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: нет
Всего: 3



Попробуй поэкспериментировать с этим:
Код

STDMETHODIMP CMyTicker::SetClientSite (LPOLECLIENTSITE pSite)
{
    HRESULT hr = CComControlBase::IOleObject_SetClientSite (pSite);
    if (!pSite)
        return hr;
    if (FAILED(GetAmbientBackColor (m_clrBackColor)))
        m_clrBackColor = (OLE_COLOR) RGB(255,255,255);
    if (FAILED(GetAmbientForeColor (m_clrForeColor)))
        m_clrForeColor = (OLE_COLOR) RGB(0,0,0);
    m_clrBorderColor = m_clrBackColor;
..........................................


А в классе своем FirstATL добавить:
Код

public:
OLE_COLOR m_clrBackColor;
OLE_COLOR m_clrBorderColor;
OLE_COLOR m_clrForeColor;


И в функции OnDraw своего элемента в самом начале функции:
Код

HRESULT OnDraw(ATL_DRAWINFO& di)
    {
USES_CONVERSION;
RECT rect = *(LPRECT) di.prcBounds;
        HDC hdc = di.hdcDraw;
        HBRUSH hBrush;
        COLORREF backClr;
        COLORREF foreClr;
        COLORREF borderClr;
        ::OleTranslateColor ( m_clrBackColor, NULL, &backClr );
        ::OleTranslateColor ( m_clrBorderColor, NULL, &borderClr );
        ::OleTranslateColor ( m_clrForeColor, NULL, &foreClr );
        hBrush = CreateSolidBrush ( backClr );
        FillRect ( hdc, &rect, hBrush );
        hBrush = CreateSolidBrush ( borderClr );
        FrameRect ( hdc, &rect, hBrush );

                         //дальше тебе не обязательно
        IFont* pIFont;
        m_pFont->QueryInterface ( IID_IFont, reinterpret_cast <void**> ( &pIFont ));
        HFONT curFont, OrigFont;
        pIFont->get_hFont ( &curFont );
        pIFont->AddRefHfont ( curFont );
        OrigFont = (HFONT) SelectObject ( hdc, curFont );
        SetBkColor ( hdc, backClr );
        SetTextColor ( hdc, foreClr );
.......................................


Это сообщение отредактировал(а) kurlyak - 24.3.2010, 23:04
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0416 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.