drawtext问题,怎么样能让画出来的字体大小可随窗口伸缩

shanyang1 2010-01-07 06:02:58
drawtext问题,怎么样能让画出来的字体大小可随窗口伸缩
...全文
325 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leechrockgames 2010-01-07
  • 打赏
  • 举报
回复

#include"ENfont.h"


void ENfont::LHxxINITFONT(HFONT &font,LPCTSTR name,int width, int height)
{

font = CreateFont( height, // 字符高度(逻辑单位)
width, // 字符宽度(逻辑单位) 0为自动匹配
0, // 字符行角度
0, // 字符基线角度
400, // 0--1000 字体浓暗程度, 400为正常的
FALSE, // 是否为斜体字
FALSE, // 是否加下划线
0, // 是否加中划线
GB2312_CHARSET, // 指定字符集
OUT_DEFAULT_PRECIS, // 指定输出精度
CLIP_DEFAULT_PRECIS, // 指定剪切精度
DEFAULT_QUALITY, // 指定输出质量
DEFAULT_PITCH|FF_SWISS, // 指定间距, 字体族
name // 字体名
);
}


//Ddraw专用
void ENfont::LHxxDRAWFONT( HFONT &font,COLORREF RGB_value,char *info,int x,int y)
{
HDC hdc;
lpddsback->GetDC(&hdc);
SetBkMode(hdc, TRANSPARENT);
SelectObject( hdc, font );//选择字体

SetTextColor(hdc, RGB_value);
TextOut(hdc, x, y, info, strlen(info));
lpddsback->ReleaseDC(hdc);

}




void ENfont::LHxxSHOW_GDITEXT(HFONT &font,D3DXCOLOR RGB_back,COLORREF RGB_value,char *info,int x,int y)
{
//isalnum(window_char_message);
HDC hdc;
// get the dc
hdc = GetDC(hWnd);
// set the color
SetBkMode(hdc,OPAQUE);
SelectObject( hdc, font );//选择字体

SetTextColor(hdc,RGB_value);
//1.0f:不用底透明色,即:底为黑色;0.0f:则用底色
//色排列为:BGR.
//RGB_back D3DXCOLOR(200,100,100,1.0f);
SetBkColor(hdc,RGB_back);


// SetBkColor(hdc,D3DCOLOR_RGBA(0,0,0,0));
// print the message
TextOut(hdc,x,y,info,strlen(info));
// release the dc
ReleaseDC(hWnd,hdc);

}



void ENfont::LHxxFREEFONT(HFONT &font)
{
DeleteObject(font);
}






void ENfont::LHxxCREATE_FONT(LPD3DXFONT &m_pFont,int size_w,int size_h,char *name)
{
HDC hDC = GetDC( NULL );
ReleaseDC( NULL, hDC );
D3DXCreateFont( m_pd3dDevice, // D3D device
size_h, // Height
size_w, // Width
0, // Weight 0 FW_BOLD
0, // MipLevels, 0 = autogen mipmaps
FALSE, // Italic
DEFAULT_CHARSET, // CharSet
OUT_DEFAULT_PRECIS, // OutputPrecision
DEFAULT_QUALITY, // Quality
DEFAULT_PITCH | FF_SWISS, // PitchAndFamily FF_SWISS FF_DONTCARE
TEXT(name), // pFaceName TEXT("Arial")黑体
&m_pFont); // ppFont
// Restore the fonts
m_pFont->OnResetDevice();
}


void ENfont::LHxxSHOW_CHINATEXT(LPD3DXFONT &pFont,char *info,D3DXCOLOR RGB_value,int x,int y)
{
RECT rc;
SetRect( &rc, x, y, 0, 0 );
pFont->DrawText( NULL,info, -1, &rc, DT_NOCLIP,RGB_value);
// pFont->DrawText( NULL,info, -1, &rc, DT_NOCLIP, D3DXCOLOR( r, g, b, 1.0f ));
}




void ENfont::LHxxFREE_FONT(LPD3DXFONT &m_pFont)
{
if(m_pFont)
{
SAFE_DELETE( m_pFont );
}
}

shanyang1 2010-01-07
  • 打赏
  • 举报
回复
我看vc的帮助上有truetype类型的字体是向量字体,应该是可以收缩的把
sb3day 2010-01-07
  • 打赏
  • 举报
回复
动态创建字体,窗口OnSize()改变的时候m_Size也改变
	 CFont* hFont=new CFont;
hFont->CreateFont(m_Size,0,0,0,
FW_DONTCARE,
0,
0,
0,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS,
_T("宋体"));

CFont* hOldFont = pDC->SelectObject(hFont);
delete hFont;
许文君 2010-01-07
  • 打赏
  • 举报
回复
获取窗口大小然后重绘
xwsn007 2010-01-07
  • 打赏
  • 举报
回复
...
SuperLy 2010-01-07
  • 打赏
  • 举报
回复
1、根据窗口大小计算合适的字体,然后在绘制前修改字体大小
2、根据窗口大小使用BitBlt()缩放拷贝到目标HDC

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧