首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC 从绘图形区域,用drawtext和textout显示字体时大小改变不了

2012-08-11 
VC 自绘图形区域,用drawtext和textout显示字体时大小改变不了!请教,VC 自绘图形区域,显示字体大小改变不了

VC 自绘图形区域,用drawtext和textout显示字体时大小改变不了!
请教,VC 自绘图形区域,显示字体大小改变不了的问题,用了字体结构或字体类定义后,用drawtext和textout显示字符串时,字体基本没变化,想把字体调大点,但是调不大?
  请高手们来指点指点!


C/C++ code
//.h文件定义     RECT     m_drawArea;    HDC      HdblDC;        //绘图缓存    HBITMAP  HdblOldBitmap;//.cpp文件void CTestDlg::InitOnPaintInfo(){    m_drawArea.left = m_drawArea .top = 0;     m_drawArea.right = PIC_RECT_WIDTH;    m_drawArea.bottom = PIC_RECT_HIGHT;    HDC dc = ::GetDC (m_hwnd);    HdblDC = CreateCompatibleDC(dc);    HdblOldBitmap = CreateCompatibleBitmapdc,m_drawArea.right,m_drawArea.bottom);    HdblOldBitmap = (HBITMAP)SelectObject(HdblDC, HdblOldBitmap);    ::ReleaseDC(m_hwnd, dc);}void CTestDlg::DrawFun(){    RECT  r = m_drawArea;        CRect rect;    HDC hdc = NULL;    hdc = ::GetDC(m_hwnd);    LOGFONT LogFont;    CFont draw_Font;//方式一:    NONCLIENTMETRICS nm;    ::ZeroMemory(&nm,sizeof(nm));    nm.cbSize = sizeof (nm);    VERIFY (SystemParametersInfo(SPI_GETNONCLIENTMETRICS,nm.cbSize,&nm,0));     LogFont = nm.lfCaptionFont;    LogFont.lfWeight = FW_BOLD;    LogFont.lfHeight = 50;    LogFont.lfWidth = 50;    draw_Font.CreateFontIndirect(&LogFont);//方式二:    draw_Font.CreateFont(200,100,//nHeight,nWidth                0,       //int nEscapement,                200,       //int nOrientation,                 100,       //int nWeight,                FALSE, //BYTE bItalic,                FALSE,       //BYTE bUnderline,                FALSE,       //BYTE cStrikeOut,                DEFAULT_CHARSET, //BYTE nCharSet,                OUT_CHARACTER_PRECIS, //BYTE nOutPrecision,                CLIP_DEFAULT_PRECIS, //BYTE nClipPrecision,                DEFAULT_QUALITY,       //BYTE nQuality,                FIXED_PITCH|FF_MODERN,        //BYTE                         nPitchAndFamily,                "隶书"                );    CFont* pOldFont2 = (CFont*)SelectObjectHdblDC, &draw_Font);    DrawText(HdblDC, str, -1, rect, DT_SINGLELINE|DT_VCENTER|DT_CENTER);//|DT_LEFT    TextOut(HdblDC, rect.left, rect.top, str, 1);    SelectObject(hdc, pOldFont2);    BitBlt(hdc, r.left, r.top, (r.right- r.left), (r.bottom- r.top), HdblDC, r.left, r.top,             SRCCOPY);    ::ReleaseDC(m_hwnd, hdc);}


[解决办法]
参数不对呗。
[解决办法]
把CFont 对象或者指针设置为全局变量;
就OK了
[解决办法]
用CreateFontIndirect试试,LOGFONT的变量设置要正确
[解决办法]


m_pFONT = new CFont();
set_font(20, m_pFONT ,"隶书");
set_font(int height,CFont *font,char *name)
{
LOGFONT lf;
lf.lfHeight=20; lf.lfWidth= 0;
lf.lfEscapement=0; lf.lfOrientation= 0;
lf.lfWeight= 460; lf.lfItalic= 0;
lf.lfUnderline =0; lf.lfStrikeOut =0;
lf.lfCharSet = DEFAULT_CHARSET ; lf.lfOutPrecision =1;
lf.lfClipPrecision =1; lf.lfQuality= DEFAULT_QUALITY;
lf.lfPitchAndFamily =1; lstrcpy(lf.lfFaceName, "楷体_GB2312");
lf.lfOutPrecision =OUT_TT_ONLY_PRECIS;//OUT_TT_PRECIS;

lf.lfHeight= height; //字体大小
lstrcpy(lf.lfFaceName, name);//名称 
if (font!=NULL)

font->DeleteObject();
font->CreateFontIndirect(&lf);

}
[解决办法]
MSDN上说

For the MM_TEXT mapping mode, you can use the following formula to specify a height for a font with a given point size: 
lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);



C/C++ code
void CSDI1View::OnDraw(CDC* pDC){  CSDI1Doc* pDoc = GetDocument();  ASSERT_VALID(pDoc);  // TODO: add draw code for native data here  LOGFONT logFont = {0};  logFont.lfHeight = -MulDiv(120, pDC->GetDeviceCaps(LOGPIXELSY), 72);  _tcscpy_s(logFont.lfFaceName, _T("隶书"));  CFont mFont;  mFont.CreateFontIndirect(&logFont);  CFont *pOldFont = pDC->SelectObject(&mFont);  pDC->DrawText(_T("中国"), CRect(0, 0, 500, 500), 0);  pDC->SelectObject(pOldFont);}
[解决办法]
lf.lfHeight= height; //字体大小
你把height设成负数试试
[解决办法]
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法

热点排行