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);
Проблема c 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 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, чтоб нормально выбирался шрифт?
Цитата:
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 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, чтоб нормально выбирался шрифт?
Все это следовало бы сделать так:
Код:
P.S. IMHO такие вопросы необходимо задавать в разделе Win32 Api
dc.SelectObject нет такой функции, надо dc.SelectFont, а так все работает, как надо