Как закрасить правую область в CTabCtrl?
От: dennisV Россия http://dennis.psunrise.com
Дата: 14.07.02 20:45
Оценка:
Помогите пожалуйста, как закрасить отмеченную область (ну например битмапом из ресурса). У меня свои CPropertySheet и CTabCtrl классы, но OnPaint, OnNcPaint, EraseBkgnd делают не то что я бы хотел... Или мне все же придется писать полностью ownerdraw? Буду рад любым откликам.

MCP, MCSD
Re: Как закрасить правую область в CTabCtrl?
От: VVV Россия  
Дата: 17.07.02 09:15
Оценка:
Здравствуйте dennisV, Вы писали:

V>Помогите пожалуйста, как закрасить отмеченную область (ну например битмапом из ресурса). У меня свои CPropertySheet и CTabCtrl классы, но OnPaint, OnNcPaint, EraseBkgnd делают не то что я бы хотел... Или мне все же придется писать полностью ownerdraw? Буду рад любым откликам.


V>


А так? (у меня получилось)


BOOL CMyTabCtrl::OnEraseBkgnd(CDC* pDC) 
{
    // TODO: Add your message handler code here and/or call default
    
    BOOL res=CTabCtrl::OnEraseBkgnd(pDC);
    
    RECT r;
    GetClientRect(&r);
    CBrush br(RGB(0, 255, 0));

    RECT ri;
    GetItemRect(GetItemCount()-1, &ri);
    ri.top=r.top;
    ri.left=ri.right;
    ri.right=r.right;

    pDC->FillRect(&ri, &br);
    int mode=pDC->SetBkMode(TRANSPARENT);
    pDC->DrawText("Hello", &ri, DT_CENTER);
    pDC->SetBkMode(mode);

    return res;
}
Re[2]: Как закрасить правую область в CTabCtrl?
От: dennisV Россия http://dennis.psunrise.com
Дата: 17.07.02 17:34
Оценка:
Здравствуйте VVV, Вы писали:

Да, такой вариант я уже пробовал, но он не закрашивает один-два пикселя над табами (один их них приподнят как активный, а остальные ниже на один-два пикселя).

VVV>Здравствуйте dennisV, Вы писали:


V>>Помогите пожалуйста, как закрасить отмеченную область (ну например битмапом из ресурса). У меня свои CPropertySheet и CTabCtrl классы, но OnPaint, OnNcPaint, EraseBkgnd делают не то что я бы хотел... Или мне все же придется писать полностью ownerdraw? Буду рад любым откликам.


V>>


VVV>А так? (у меня получилось)



VVV>
VVV>BOOL CMyTabCtrl::OnEraseBkgnd(CDC* pDC) 
VVV>{
VVV>    // TODO: Add your message handler code here and/or call default
VVV>    
VVV>    BOOL res=CTabCtrl::OnEraseBkgnd(pDC);
VVV>    
VVV>    RECT r;
VVV>    GetClientRect(&r);
VVV>    CBrush br(RGB(0, 255, 0));

VVV>    RECT ri;
VVV>    GetItemRect(GetItemCount()-1, &ri);
VVV>    ri.top=r.top;
VVV>    ri.left=ri.right;
VVV>    ri.right=r.right;

VVV>    pDC->FillRect(&ri, &br);
VVV>    int mode=pDC->SetBkMode(TRANSPARENT);
VVV>    pDC->DrawText("Hello", &ri, DT_CENTER);
VVV>    pDC->SetBkMode(mode);

VVV>    return res;
VVV>}

VVV>
MCP, MCSD
Re[2]: Как закрасить правую область в CTabCtrl?
От: Александр Коуров  
Дата: 18.07.02 07:28
Оценка:
Попробуй установить кисть через SetClassLong
Independent software developer
Re[3]: Как закрасить правую область в CTabCtrl?
От: dennisV Россия http://dennis.psunrise.com
Дата: 19.07.02 13:23
Оценка:
Здравствуйте Александр Коуров, Вы писали:

АК>Попробуй установить кисть через SetClassLong


Да, такой вариант тоже работает, но тоже неправильно — почему-то закрашиваюся дополнительные области (прямо под табом, но над property sheet, и по бокам и внизу property sheet.) Есть ли какие-нибудь идеи по этому поводу?

MCP, MCSD
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.