动态创建的Static Text类型如何更改其字体
以下是部分程序代码CFontnewFont;CWnd*pWnd=GetDlgItem(10000);CDC*pDC=GetDC();intnDC=pDC->SaveDC(...
以下是部分程序代码
CFont newFont;
CWnd* pWnd = GetDlgItem(10000);
CDC* pDC = GetDC();
int nDC = pDC->SaveDC();
newFont.CreateFont(30, 0, 0, 0, FW_HEAVY, TRUE, 0, 0, 0, 0, 0, 0, FF_SCRIPT, 0);
pDC->SelectObject(&newFont);
pWnd->SetFont(&newFont);
SetFont(&newFont);
GetDlgItem(10000)->SetFont(&newFont);
CStatic m_static.Create(_T("1"), WS_VISIBLE|WS_CHILD|CBS_SORT|CBS_DROPDOWN, staticRect, this, 10000);
但是没有改变成功,怎么回事?
按照楼下两位的做法改过后没有编译和链接错误,也没有断言之类的错误,但是有运行错误。调试发现错在GetLogFont函数中。。调试错误为 0x78ba9d0c (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突。是不是我动态创建的Static Text控件有问题? 展开
CFont newFont;
CWnd* pWnd = GetDlgItem(10000);
CDC* pDC = GetDC();
int nDC = pDC->SaveDC();
newFont.CreateFont(30, 0, 0, 0, FW_HEAVY, TRUE, 0, 0, 0, 0, 0, 0, FF_SCRIPT, 0);
pDC->SelectObject(&newFont);
pWnd->SetFont(&newFont);
SetFont(&newFont);
GetDlgItem(10000)->SetFont(&newFont);
CStatic m_static.Create(_T("1"), WS_VISIBLE|WS_CHILD|CBS_SORT|CBS_DROPDOWN, staticRect, this, 10000);
但是没有改变成功,怎么回事?
按照楼下两位的做法改过后没有编译和链接错误,也没有断言之类的错误,但是有运行错误。调试发现错在GetLogFont函数中。。调试错误为 0x78ba9d0c (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突。是不是我动态创建的Static Text控件有问题? 展开
3个回答
展开全部
窗口都有2个和字体有关的函数:
CWnd::GetFont()和SetFont(CFont*, BOOL);
1)CFont* pFont = m_static.GetFont();
2)LOGFONT LogFont;
pFont->GetLogFont(&LogFont);
3)对LogFont直接操纵修改里面的字体选项//如LogFont.lfUnderline = 1;设置下划线
4)pFont->Detach();
第四步的目的是将pFont里装有的HFONT解除关联,否则pFont无法调用紧接的Create函数。
5)pFont->CreateFontIndirect(&LogFont);
m_static.SetFont(pFont);
6)pFont->Detach();
必须再一次解除在pFont里装载的HFONT,原因是第5步已经将HFONT赋给了m_static。pFont的任务已完成,不应该持有HFONT资源,它也不能去销毁HFONT,因为m_static在使用这个HFONT,所以必须是Detach()来解除关联。
CWnd::GetFont()和SetFont(CFont*, BOOL);
1)CFont* pFont = m_static.GetFont();
2)LOGFONT LogFont;
pFont->GetLogFont(&LogFont);
3)对LogFont直接操纵修改里面的字体选项//如LogFont.lfUnderline = 1;设置下划线
4)pFont->Detach();
第四步的目的是将pFont里装有的HFONT解除关联,否则pFont无法调用紧接的Create函数。
5)pFont->CreateFontIndirect(&LogFont);
m_static.SetFont(pFont);
6)pFont->Detach();
必须再一次解除在pFont里装载的HFONT,原因是第5步已经将HFONT赋给了m_static。pFont的任务已完成,不应该持有HFONT资源,它也不能去销毁HFONT,因为m_static在使用这个HFONT,所以必须是Detach()来解除关联。
推荐于2016-08-03 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:25897
获赞数:1464972
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。
向TA提问 私信TA
关注
展开全部
参考代码如下:
HBRUSH 类名::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); //明明没用,但没有它也不行,很奇怪!
if (pWnd->GetDlgCtrlID()==IDC_STATIC_×××)
{
pDC->SetTextColor(RGB(0,0,255)); //蓝色字体
pDC->SelectObject(&m_font); //设置已设置的字体
}
return m_brush;
}
HBRUSH 类名::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); //明明没用,但没有它也不行,很奇怪!
if (pWnd->GetDlgCtrlID()==IDC_STATIC_×××)
{
pDC->SetTextColor(RGB(0,0,255)); //蓝色字体
pDC->SelectObject(&m_font); //设置已设置的字体
}
return m_brush;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
LOGFONT logfont;//最好弄成类成员,全局变量,静态成员
CFont *pfont = m_ctrShowMessage.GetFont();
pfont->GetLogFont( &logfont );
logfont.lfHeight =logfont.lfHeight * 1.5;
logfont.lfWidth = logfont.lfWidth * 1.5;
CFont font;
font.CreateFontIndirect(&logfont);
m_ctrShowMessage.SetFont(&font);
如果还有问题,可按照下面的方法与我沟通:
http://hi.baidu.com/%BA%CE%D6%BE%B5%A4/profile
CFont *pfont = m_ctrShowMessage.GetFont();
pfont->GetLogFont( &logfont );
logfont.lfHeight =logfont.lfHeight * 1.5;
logfont.lfWidth = logfont.lfWidth * 1.5;
CFont font;
font.CreateFontIndirect(&logfont);
m_ctrShowMessage.SetFont(&font);
如果还有问题,可按照下面的方法与我沟通:
http://hi.baidu.com/%BA%CE%D6%BE%B5%A4/profile
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询