Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема c CreateCompatibleDC

390
26 апреля 2006 года
lexus
143 / / 13.04.2004
Помогите разобраться с фонтами.
Было у меня так:
CPaintDC dc(m_hWnd);
LOGFONT logfont;
logfont.lfHeight=16;
logfont.lfWidth=0;
logfont.lfEscapement=0;
logfont.lfOrientation=0;
logfont.lfWeight=FW_NORMAL;
logfont.lfItalic=0;
logfont.lfUnderline=0;
logfont.lfStrikeOut=0;
logfont.lfCharSet=DEFAULT_CHARSET;
logfont.lfOutPrecision=OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision=CLIP_DEFAULT_PRECIS;
logfont.lfQuality=PROOF_QUALITY;
logfont.lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
strcpy(logfont.lfFaceName,"Times New Roman");

HFONT tmpfont=dc.SelectFont(CreateFontIndirect(&logfont));
char tmp[]="sadfsadf";
dc.TextOutA(100,100,tmp);
dc.LineTo(200,600);
int width,height;
width=dc.GetDeviceCaps(HORZRES);
height=dc.GetDeviceCaps(VERTRES);
HDC tdc=0;
static bool b=0;
if (b)tdc=CreateCompatibleDC(dc);else tdc=0;
b=!b;

HBITMAP memBM = CreateCompatibleBitmap ( tdc, width, height );
SelectObject ( tdc, memBM );
BitBlt(tdc,0,0,width,height,dc,0,0,SRCCOPY);
LineTo(tdc,100,100);
BitBlt(dc,0,0,width,height,tdc,0,0,SRCCOPY);
dc.SelectFont(tmpfont);

При каждой новой перерисовке, шрифт то утолщается, то уменьшается и линия LineTo(100,100) то пропадает, то исчезает.
Проблема с CreateCompatibleDC. Без нее нельзя, а с ней парится шрифт, он становится почему-то толще.
Как использовать CreateCompatibleDC, чтоб нормально выбирался шрифт?
406
27 апреля 2006 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by lexus
Помогите разобраться с фонтами.
Было у меня так:
CPaintDC dc(m_hWnd);
LOGFONT logfont;
logfont.lfHeight=16;
logfont.lfWidth=0;
logfont.lfEscapement=0;
logfont.lfOrientation=0;
logfont.lfWeight=FW_NORMAL;
logfont.lfItalic=0;
logfont.lfUnderline=0;
logfont.lfStrikeOut=0;
logfont.lfCharSet=DEFAULT_CHARSET;
logfont.lfOutPrecision=OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision=CLIP_DEFAULT_PRECIS;
logfont.lfQuality=PROOF_QUALITY;
logfont.lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
strcpy(logfont.lfFaceName,"Times New Roman");

HFONT tmpfont=dc.SelectFont(CreateFontIndirect(&logfont));
char tmp[]="sadfsadf";
dc.TextOutA(100,100,tmp);
dc.LineTo(200,600);
int width,height;
width=dc.GetDeviceCaps(HORZRES);
height=dc.GetDeviceCaps(VERTRES);
HDC tdc=0;
static bool b=0;
if (b)tdc=CreateCompatibleDC(dc);else tdc=0;
b=!b;

HBITMAP memBM = CreateCompatibleBitmap ( tdc, width, height );
SelectObject ( tdc, memBM );
BitBlt(tdc,0,0,width,height,dc,0,0,SRCCOPY);
LineTo(tdc,100,100);
BitBlt(dc,0,0,width,height,tdc,0,0,SRCCOPY);
dc.SelectFont(tmpfont);

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



Все это следовало бы сделать так:

Код:
CPaintDC dc(m_hWnd);
        LOGFONT logfont;
        logfont.lfHeight=16;
        logfont.lfWidth=0;
        logfont.lfEscapement=0;
        logfont.lfOrientation=0;
        logfont.lfWeight=FW_NORMAL;
        logfont.lfItalic=0;
        logfont.lfUnderline=0;
        logfont.lfStrikeOut=0;
        logfont.lfCharSet=DEFAULT_CHARSET;
        logfont.lfOutPrecision=OUT_DEFAULT_PRECIS;
        logfont.lfClipPrecision=CLIP_DEFAULT_PRECIS;
        logfont.lfQuality=PROOF_QUALITY;
        logfont.lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
        strcpy(logfont.lfFaceName,"Times New Roman");

HFONT newfont=CreateFontIndirect(&logfont);
HFONT tmpfont=dc.SelectObject(newfont);

char tmp[]="sadfsadf";
dc.TextOutA(100,100,tmp);
dc.LineTo(200,600);
dc.SelectObject(tmpfont);

int width,height;

width=dc.GetDeviceCaps(HORZRES);
height=dc.GetDeviceCaps(VERTRES);
HDC tdc=0;
static bool b=0;
if (b)tdc=CreateCompatibleDC(dc);else tdc=0;
b=!b;

HBITMAP memBM = CreateCompatibleBitmap ( dc, width, height );
SelectObject ( tdc, newfont);
SelectObject ( tdc, memBM );
BitBlt(tdc,0,0,width,height,dc,0,0,SRCCOPY);
LineTo(tdc,100,100);
BitBlt(dc,0,0,width,height,tdc,0,0,SRCCOPY);

DeleteObject(memBM);
DeleteObject(newfont);
DeleteDC(tdc);



P.S. IMHO такие вопросы необходимо задавать в разделе Win32 Api
390
27 апреля 2006 года
lexus
143 / / 13.04.2004
Большое спасибо.
dc.SelectObject нет такой функции, надо dc.SelectFont, а так все работает, как надо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог