在。net中怎样调用MFC中的方法CFont::CreatePointFont

curdle 2005-09-19 02:44:59
我想调用MFC中CFont::CreatePointFont方法,创建自己的字体,如何调用?
...全文
223 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovewindy 2005-09-20
  • 打赏
  • 举报
回复
其实C#就是封装了一些底层的方法,让开发人员用得简单,
font就是C#里操作字体的类,
curdle 2005-09-20
  • 打赏
  • 举报
回复
谢谢楼上兄弟?

MFC中CFont::CreatePointFont方法与c#中的Font f = new Font(familyName, emSize)方法是不是等效的啊?


lookfeng 2005-09-19
  • 打赏
  • 举报
回复
这是C==实现:
BOOL CFont::CreatePointFont(int nPointSize, LPCTSTR lpszFaceName, CDC* pDC)
{
ASSERT(AfxIsValidString(lpszFaceName));

LOGFONT logFont;
memset(&logFont, 0, sizeof(LOGFONT));
logFont.lfCharSet = DEFAULT_CHARSET;
logFont.lfHeight = nPointSize;
lstrcpyn(logFont.lfFaceName, lpszFaceName, _countof(logFont.lfFaceName));

return CreatePointFontIndirect(&logFont, pDC);
}

BOOL CFont::CreatePointFontIndirect(const LOGFONT* lpLogFont, CDC* pDC)
{
ASSERT(AfxIsValidAddress(lpLogFont, sizeof(LOGFONT), FALSE));
HDC hDC;
if (pDC != NULL)
{
ASSERT_VALID(pDC);
ASSERT(pDC->m_hAttribDC != NULL);
hDC = pDC->m_hAttribDC;
}
else
hDC = ::GetDC(NULL);

// convert nPointSize to logical units based on pDC
LOGFONT logFont = *lpLogFont;
POINT pt;
pt.y = ::GetDeviceCaps(hDC, LOGPIXELSY) * logFont.lfHeight;
pt.y /= 720; // 72 points/inch, 10 decipoints/point
pt.x = 0;
::DPtoLP(hDC, &pt, 1);
POINT ptOrg = { 0, 0 };
::DPtoLP(hDC, &ptOrg, 1);
logFont.lfHeight = -abs(pt.y - ptOrg.y);

if (pDC == NULL)
ReleaseDC(NULL, hDC);

return CreateFontIndirect(&logFont);
}
因此你可以转换以上C++代码。或者干脆这样不就完事了:
Font f = new Font(familyName, emSize);



110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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