如何使得字体跟随客户区大小的变化而变化? 需要在客户区内显示一串字符,字符单行居中显示。问题是:如何使得客户区内的字体跟随客户区大小的变化而变化?也就是说如果客户区大小发生变化,我须显示的文字依然能够全部显示,字体能够自动变化以配合客户区的变化。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己建立字体,字体的大小不就可以控制了嘛。然后WM_SIZE里重新计算字体的大小,然后... //创建并设置字体 CFont font;//成员对象、全局对象或静态对象 m_font.CreateFont( MulDiv(10,-dc.GetDeviceCaps(LOGPIXELSY),72),//10:高度 30,//30:宽度 0,0,FW_NORMAL,0,0,0, ANSI_CHARSET,OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY, VARIABLE_PITCH|FF_SWISS, _T("System"));//字体 this->SetFont(&font);//CWnd*(可以是控件) font.DeleteObject(); henryzc() ,我就是不想自己计算呀,那太复杂了。谁有函数可以提供?up有分,不够可再加。 bluebohe(薄荷),没办法,一个人的力量有限,能够有现成的控件,谁还会想去自己重新开发? 一段自己计算的代码:{ int nLen; LOGFONT aLogfont; CString str; CFont aFont; CRect aRect; ... GetClientRect(aRect); nLen = str.GetLength(); aLogfont.lfWidth=aRect.Width()/nLen; aLogfont.lfHeight=aRect.Width()*2/nLen; ... aFont.CreateFontIndirect(&aLogfont); ...}谁还有更好的,大家共享。 createfont(0,0,......0,width/x,// 每个字的宽度..."arial") 只要设置映射模式为MM_ANISOTROPIC,不用改变字体大小。当然,字体要通过CreateFont创建。 很抱歉,我好久没来了!Mackz(在相互),能不能说得详细点? To:handsomerun(毛毛)《VC技术内幕》第4版,前几章我以前看过,听你一说好像有点印象,等我翻翻书后再给回复。 参考《VC技术内幕》,简单的实现程序如下:void CEx05cwView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) { // TODO: Add your specialized code here and/or call the base class CRect aRect; GetClientRect(aRect); pDC->SetMapMode(MM_ANISOTROPIC); pDC->SetWindowExt(aRect.Width(),aRect.Height()); pDC->SetViewportExt(aRect.Width(),aRect.Height()); CView::OnPrepareDC(pDC, pInfo);}void CEx05cwView::OnDraw(CDC* pDC){ CEx05cwDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here int nLen; CFont aFont; CRect aRect; CString strText; strText.Format("This is a test for CFont !"); nLen = strText.GetLength(); GetClientRect(aRect); aFont.CreateFont(aRect.Height(),aRect.Width()/nLen,0,0,0,FALSE,FALSE,0,ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"Arial"); CFont* pOldFont = pDC->SelectObject(&aFont); pDC->TextOut(0,0,strText); pDC->SelectObject(pOldFont);}关键点有两个:一、使用MM_ANISOTROPIC映射模式。二、指定字体的宽和高。一点体会大家共享。 MFC简单问题 MFC 随机数问题 如何响应动态生成树的 OnSelchanged 事件(在线等) 统计VC6专属语法 用vc++编一个文件目录管理的程序 求助!怎样取得一个非活动View得指针,谢谢! GDI+使用问题 非客户区能改变大小吗? <<visual c++音视频编解码技术及实践>>9成新书转让 关于SDI关闭文档的问题 VS.NET 2003 + MSDN2003 for .NET 中文版下载 求CScrollView或CFormView的滚动条的OnHScroll的示例,谢谢
然后WM_SIZE里重新计算字体的大小,然后...
CFont font;//成员对象、全局对象或静态对象
m_font.CreateFont(
MulDiv(10,-dc.GetDeviceCaps(LOGPIXELSY),72),//10:高度
30,//30:宽度
0,0,FW_NORMAL,0,0,0,
ANSI_CHARSET,OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,
VARIABLE_PITCH|FF_SWISS,
_T("System"));//字体
this->SetFont(&font);//CWnd*(可以是控件)
font.DeleteObject();
谁有函数可以提供?
up有分,不够可再加。
{
int nLen;
LOGFONT aLogfont;
CString str;
CFont aFont;
CRect aRect;
...
GetClientRect(aRect);
nLen = str.GetLength();
aLogfont.lfWidth=aRect.Width()/nLen;
aLogfont.lfHeight=aRect.Width()*2/nLen;
...
aFont.CreateFontIndirect(&aLogfont);
...
}
谁还有更好的,大家共享。
...
0,
width/x,// 每个字的宽度
...
"arial"
)
Mackz(在相互),能不能说得详细点?
《VC技术内幕》第4版,前几章我以前看过,听你一说好像有点印象,等我翻翻书后再给回复。
void CEx05cwView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
CRect aRect; GetClientRect(aRect);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(aRect.Width(),aRect.Height());
pDC->SetViewportExt(aRect.Width(),aRect.Height());
CView::OnPrepareDC(pDC, pInfo);
}
void CEx05cwView::OnDraw(CDC* pDC)
{
CEx05cwDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int nLen;
CFont aFont;
CRect aRect;
CString strText; strText.Format("This is a test for CFont !");
nLen = strText.GetLength();
GetClientRect(aRect);
aFont.CreateFont(aRect.Height(),aRect.Width()/nLen,0,0,0,FALSE,FALSE,0,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"Arial");
CFont* pOldFont = pDC->SelectObject(&aFont);
pDC->TextOut(0,0,strText);
pDC->SelectObject(pOldFont);
}
关键点有两个:
一、使用MM_ANISOTROPIC映射模式。
二、指定字体的宽和高。
一点体会大家共享。