如何使得字体跟随客户区大小的变化而变化?

cnwww 2003-10-17 05:00:49
需要在客户区内显示一串字符,字符单行居中显示。
问题是:如何使得客户区内的字体跟随客户区大小的变化而变化?也就是说如果客户区大小发生变化,我须显示的文字依然能够全部显示,字体能够自动变化以配合客户区的变化。
...全文
41 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnwww 2003-12-19
  • 打赏
  • 举报
回复
参考《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映射模式。
二、指定字体的宽和高。
一点体会大家共享。
handsomerun 2003-12-18
  • 打赏
  • 举报
回复
我那天看到《VC技术内幕》第4版,第五章吧,有一个范例叫EX05C,他用了一种字体,可以随客户区的大小的变化而变化
 具体我没仔细看,如果你有可能去看一下
cnwww 2003-12-18
  • 打赏
  • 举报
回复
很抱歉,我好久没来了!
Mackz(在相互),能不能说得详细点?
chehw 2003-12-18
  • 打赏
  • 举报
回复
同意Mackz(在相互)
cnwww 2003-12-18
  • 打赏
  • 举报
回复
To:handsomerun(毛毛)
《VC技术内幕》第4版,前几章我以前看过,听你一说好像有点印象,等我翻翻书后再给回复。
菜牛 2003-12-01
  • 打赏
  • 举报
回复
只要设置映射模式为MM_ANISOTROPIC,不用改变字体大小。当然,字体要通过CreateFont创建。
魔芋 2003-12-01
  • 打赏
  • 举报
回复
createfont(0,0,...
...
0,
width/x,// 每个字的宽度
...
"arial"
)
cnwww 2003-12-01
  • 打赏
  • 举报
回复
各位关注一下呀,不然我可散分了!:)
cnwww 2003-10-27
  • 打赏
  • 举报
回复
一段自己计算的代码:
{
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);
...
}
谁还有更好的,大家共享。
cnwww 2003-10-18
  • 打赏
  • 举报
回复
bluebohe(薄荷),没办法,一个人的力量有限,能够有现成的控件,谁还会想去自己重新开发?
bluebohe 2003-10-17
  • 打赏
  • 举报
回复
那有什么复杂,别把事情都交给别人做啊
cnwww 2003-10-17
  • 打赏
  • 举报
回复
henryzc() ,我就是不想自己计算呀,那太复杂了。
谁有函数可以提供?
up有分,不够可再加。
lsl7909 2003-10-17
  • 打赏
  • 举报
回复
返回窗体的变化大小,重新设置字体大小
孤必有邻 2003-10-17
  • 打赏
  • 举报
回复
//创建并设置字体
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 2003-10-17
  • 打赏
  • 举报
回复
自己建立字体,字体的大小不就可以控制了嘛。
然后WM_SIZE里重新计算字体的大小,然后...

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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