Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > DrawText


Автор: Dreamer_0x01 13.7.2005, 15:12
Имеется класс, производный от CWnd.
В обработчике WM_PAINT пишу такой код:
Код

void MyClass::OnPaint()
{
    CPaintDC dc(this); //не используется, но убирать нельзя, иначе глюки страшные будут
/*используем двойную буферизацию, так как рисуем очень часто, чтоб не мерцало*/
    CDC * pDCDest=GetDC();
    CDC dcMem;
    dcMem.CreateCompatibleDC(pDCDest);
    CBitmap *pPrevBmpMem=dcMem.GetCurrentBitmap();
    CRect rCl;
    GetClientRect(rCl);
    CBitmap BmpNewMem;
    BmpNewMem.CreateCompatibleBitmap(pDCDest, rCl.Width(), rCl.Height());
    dcMem.SelectObject(&BmpNewMem);
    dcMem.FillSolidRect(rCl, RGB(220,220,220)); 
    CDC *pDCTemp=pDCDest;
    pDCDest=&dcMem;
/*здесь рисуем кучу линий в контексте pDCDest
.....
.....
....
*/
    CFont fnt;
    fnt.CreateFont(18,0,0,0,100,0,0,0,RUSSIAN_CHARSET,0,0,0,0,"Arial");
    this->SetFont(&fnt,false);
    pDCDest->DrawText("мой текст",CRect(0,0,50,20),DT_CENTER|DT_NOCLIP|DT_SINGLELINE|DT_VCENTER);
//обратно переключаем контексты и выводим все на экран
    pDCDest=pDCTemp;
    pDCDest->BitBlt(rCl.left, rCl.top, rCl.Width(), rCl.Height(), &dcMem,rCl.left, rCl.top, SRCCOPY);
    dcMem.SelectObject(pPrevBmpMem);
//разрушаем шрифт
    fnt.DeleteObject();


проблема в том, что какой бы размер шрифта я не указывал в CreateFont(), - размер шрифта остается одним и тем же. А надо, чтобы он менялся.
Как сделать, чтобы работало?

Автор: Гость_Oleg 13.7.2005, 16:21
CFont *fnt = new CFont;
fnt->CreateFont(18,0,0,0,100,0,0,0,RUSSIAN_CHARSET,0,0,0,0,"Arial");
this->SetFont(fnt,false);

Автор: Guest 13.7.2005, 16:22
CFont *fnt = new CFont;
fnt->CreateFont(18,0,0,0,100,0,0,0,RUSSIAN_CHARSET,0,0,0,0,"Arial");
this->SetFont(fnt,false);

Автор: Гость_Oleg 13.7.2005, 16:24
CFont *fnt = new CFont;
fnt->CreateFont(18,0,0,0,100,0,0,0,RUSSIAN_CHARSET,0,0,0,0,"Arial");
this->SetFont(fnt,false);

Автор: Dreamer_0x01 13.7.2005, 16:47
И чем это от моей записи отличается? И так тоже не работает...
smile

Автор: Dreamer_0x01 13.7.2005, 17:27
Ура!!! Разобрался!
Надо делать не this->SetFont(&fnt,FALSE),
а
pDCDest->SelectObject(&fnt).
И все работает!

Автор: Coocky 13.7.2005, 21:49
Dreamer_0x01
Код

this->SetFont(&fnt,false);

Не успел я немного....Долго поднимался с пола, после падения...
Ты с чем работаешь?
С DC ?
Так какого же ты шрифт устанавливаешь для оконных обьектов?
Добавлено @ 21:53
Dreamer_0x01
И еще...
Код

СFont * oldfont=pDCDest->SelectObject(&fnt).
pDCDest->DrawText();

pDCDest->SelectObject(oldfont).

Так правильней будет...

Автор: Dreamer_0x01 13.7.2005, 23:08
Coocky
спасибо.
Это я уже тоже понял! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)