Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RoundRect Cool Edit 
V
    Опции темы
eniac
Дата 3.6.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет. Я пишу свой клас для СEdit, задача состоит в том что надо сделать едит с круглыми углами, вроде всьо нормально но проблема с отображением текста. Ввод происходит  нормально но когда я фокусируюсь на другой едит, текст перекрывает квадрат который я рисую RoundRect-ом. 
Текст :
Код


void CEditEx::OnPaint() 
{
    DrawBorder(m_fGotFocus);
}

void CEditEx::DrawBorder(bool bSelected)
{
    CRect rcItem;
    CDC* pDC = GetDC();

    GetWindowRect(&rcItem);
    ScreenToClient(&rcItem);

    
    m_style = style1;
    switch(m_style)
    {
    case defaultStyle:
        ...
        break;
    case style1:
        pDC->Draw3dRect(rcItem, m_faceColor, m_faceColor);
        rcItem.DeflateRect(1, 1);
        pDC->Draw3dRect(rcItem, m_faceColor, m_faceColor);

        CPen pen;
        COLORREF penColor = bSelected?m_selectColor:m_shadowColor;
        pen.CreatePen(PS_DOT|PS_GEOMETRIC|PS_ENDCAP_ROUND, 1, penColor);
        pDC->SelectObject(&pen);
        pDC->RoundRect(rcItem, CPoint(5, 5));
        break;
    }

    ReleaseDC(pDC);

}


ЗЫ.Топик от сюда не предлогать http://forum.vingrad.ru/forum/topic-218976/unread-1.html.

Это сообщение отредактировал(а) eniac - 3.6.2009, 14:24
PM MAIL   Вверх
Andrey44
Дата 3.6.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Я конечно не знаю сам никогда не делал, но может создать регион прямоугольник с закругленными краями и 
SetWindowRgn()


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
eniac
Дата 3.6.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сделал, ничего хорошего не получилось.... 
PM MAIL   Вверх
eniac
Дата 3.6.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хорошо, меняем тактику.... Я пытаюсь сделать рисование контрола в OnCustodraw, и сразу проблема, в тело функцыи програма не заходит.. в месадж мапе я добавил


Код

BEGIN_MESSAGE_MAP(CEditEx, CRichEditCtrl)
            ...
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomdraw)
            ...
END_MESSAGE_MAP()

PM MAIL   Вверх
eniac
Дата 3.6.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Короче. Народ задача решена. Кому будет интересно, пишите в личку...

Это сообщение отредактировал(а) eniac - 3.6.2009, 17:26
PM MAIL   Вверх
voov
Дата 4.6.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Цитата(eniac @  3.6.2009,  17:26 Найти цитируемый пост)
Народ задача решена. Кому будет интересно, пишите в личку

Зачем в личку? Опиши решение в здесь, в теме.
PM MAIL   Вверх
eniac
Дата 5.6.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код


void CEditEx::DrawBorder(bool bSelected)
{
    CRect rcItem;
    CDC* pDC = GetDC();

    GetWindowRect(&rcItem);
    ScreenToClient(&rcItem);
    if(m_bkTextColor == 0)
        m_bkTextColor = RGB(1,1,1);
    // blank the border
    switch(m_style)
    {
    case defaultStyle:
        {
            pDC->Draw3dRect(rcItem, m_shadowColor, m_lightColor);
        }
        break;
    case style1:
        {
            pDC->Draw3dRect(rcItem, m_faceColor, m_faceColor);
            rcItem.DeflateRect(1, 1);
            pDC->Draw3dRect(rcItem, m_faceColor, m_faceColor);

            CPen pen;
            COLORREF penColor = bSelected?m_selectColor:m_shadowColor;
            pen.CreatePen(PS_DOT|PS_GEOMETRIC|PS_ENDCAP_ROUND, 1, penColor);
            CBrush brush(m_bkTextColor);
            pDC->SelectObject(&pen);
            pDC->SelectObject(&brush);
            pDC->RoundRect(rcItem, CPoint(5, 5));
        }
        break;
    }
    CEdit::SetFont(&m_font, FALSE);
    CString Text;
    GetWindowText( Text );
    if( !Text.IsEmpty() )
    {    
        CRect FormatRect;
        GetRect( FormatRect );
        int LetInd = CharFromPos( CPoint( FormatRect.left, 0 ) );
        Text.Delete( 0, LetInd );

        LOGFONT logFont;
        CEdit::GetFont()->GetLogFont(&logFont);
        CFont mfont;
        mfont.CreateFontIndirect(&logFont);
        pDC->SelectObject(mfont);
        pDC->SetBkColor(m_bkTextColor);
        pDC->SetTextColor(m_textColor);
        DWORD  dwFormat = DT_SINGLELINE | DT_VCENTER;
        
        pDC->DrawText(Text, &FormatRect, dwFormat);
    }

    ReleaseDC(pDC);
}


Это сообщение отредактировал(а) eniac - 5.6.2009, 11:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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