CFont ftFolders;
CFont ftItems;
CFont ftHotItems;
LOGFONT lf;
HFONT hf = (HFONT) GetStockObject(DEFAULT_GUI_FONT);
CFont * gf = CFont::FromHandle(hf);
gf->GetLogFont(&lf);
lf.lfUnderline = TRUE;
ftHotItems.CreateFontIndirect(&lf);
lf.lfUnderline = FALSE;
CFont ftItems;
CFont ftHotItems;
LOGFONT lf;
HFONT hf = (HFONT) GetStockObject(DEFAULT_GUI_FONT);
CFont * gf = CFont::FromHandle(hf);
gf->GetLogFont(&lf);
lf.lfUnderline = TRUE;
ftHotItems.CreateFontIndirect(&lf);
lf.lfUnderline = FALSE;
ftItems.CreateFontIndirect(&lf);
lf.lfWeight = FW_SEMIBOLD;
ftFolders.CreateFontIndirect(&lf);
ftFolders.CreateFontIndirect(&lf);
lf.lfHeight = 20;
ftCaption.CreateFontIndirect(&lf);
**************************************
LOGFONT: 一个结构,用来逻辑上表达一个字体,比如LOGFONT.lfFaceName是字体的名字
HFONT: 一个句柄,相当于表示内存中的一个字体对象,它可以马上拿来用
CFont: 是mfc对于HFONT的一种封装
可以说LOGFONT是一种墨水的名字,比如英雄牌,比较抽象
而HFONT表示实实在在的一瓶墨水,打开瓶盖就可以用
CFont只是把一瓶墨水外面包了一层纸,其实它还是一瓶墨水
ftCaption.CreateFontIndirect(&lf);
**************************************
LOGFONT: 一个结构,用来逻辑上表达一个字体,比如LOGFONT.lfFaceName是字体的名字
HFONT: 一个句柄,相当于表示内存中的一个字体对象,它可以马上拿来用
CFont: 是mfc对于HFONT的一种封装
可以说LOGFONT是一种墨水的名字,比如英雄牌,比较抽象
而HFONT表示实实在在的一瓶墨水,打开瓶盖就可以用
CFont只是把一瓶墨水外面包了一层纸,其实它还是一瓶墨水
**************************************
当你需要简单的使用字体就是用CFont
如果需要定义字体的各个小的细节等复杂的字体就用LOGFONT
HFONT可以是他们两个相互之间发生联系
**************************************
请问CFont::GetLogFont(LOGFONT* logFont) 该怎么用?
CFont *pFont = new CFont;
LOGFONT logfont;
pFont->GetLogFont(&logfont);
为什么不对?
PatrickGamp是对的,至少要这样:
CFont *pFont = new CFont;
pFont->CreateFont(.... //填的参数很多:(
LOGFONT logFont;
pFont->GetLogFont(&logFont)//得到刚刚在Create里填的东东
LOGFONT logfont;
lstrcpy((LPSTR)logfont.lfFaceName,(LPSTR)"楷体_GB2312");
logfont.lfWeight=700;
logfont.lfWidth=20;
logfont.lfHeight=50;
logfont.lfEscapement=0;
logfont.lfUnderline=FALSE;
logfont.lfItalic=FALSE;
logfont.lfStrikeOut=FALSE;
logfont.lfCharSet=GB2312_CHARSET; //以上参数好像一个都不能少
pFont->CreateFontIndirect(&logfont);
//行了,这下就有内容了。可以拿来用了。
可以用CWnd::GetFont得到当前窗口的font。
*********************************************************
1.CDC *pDC和HDC hdc有什么不同,类似的有CWnd *pWnd和HWnd?
如果需要定义字体的各个小的细节等复杂的字体就用LOGFONT
HFONT可以是他们两个相互之间发生联系
**************************************
请问CFont::GetLogFont(LOGFONT* logFont) 该怎么用?
CFont *pFont = new CFont;
LOGFONT logfont;
pFont->GetLogFont(&logfont);
为什么不对?
PatrickGamp是对的,至少要这样:
CFont *pFont = new CFont;
pFont->CreateFont(.... //填的参数很多:(
LOGFONT logFont;
pFont->GetLogFont(&logFont)//得到刚刚在Create里填的东东
LOGFONT logfont;
lstrcpy((LPSTR)logfont.lfFaceName,(LPSTR)"楷体_GB2312");
logfont.lfWeight=700;
logfont.lfWidth=20;
logfont.lfHeight=50;
logfont.lfEscapement=0;
logfont.lfUnderline=FALSE;
logfont.lfItalic=FALSE;
logfont.lfStrikeOut=FALSE;
logfont.lfCharSet=GB2312_CHARSET; //以上参数好像一个都不能少
pFont->CreateFontIndirect(&logfont);
//行了,这下就有内容了。可以拿来用了。
可以用CWnd::GetFont得到当前窗口的font。
*********************************************************
1.CDC *pDC和HDC hdc有什么不同,类似的有CWnd *pWnd和HWnd?
pDC是类指针
HDC是windows句柄
通过pDC获得hdc:
HDChdc=pDC->GetSafeHdc();
通过hdc获得pDC:
CDC*pDC=newCDC;
pDC->Attach(hdc);
HDC是windows句柄
通过pDC获得hdc:
HDChdc=pDC->GetSafeHdc();
通过hdc获得pDC:
CDC*pDC=newCDC;
pDC->Attach(hdc);
2.hDC和CDC有本质区别
HDC是WINDOWS的一种数据类型,是设备描述句柄。
而CDC是MFC里的一个类,它封装了几乎所有的关于
HDC的操作。
也可以这样说,HDC定义的变量指向一块内存,这块
内存用来描述一个设备的相关的内容,所以也可以
认为HDC定义的是一个指针;而CDC类定义一个对象,
这个对象拥有HDC定义的一个设备描述表,同时也包
含与HDC相关的操作的函数。
这与HPEN和CPen,POINT与CPoint之间的差别是一样
的。
而CDC是MFC里的一个类,它封装了几乎所有的关于
HDC的操作。
也可以这样说,HDC定义的变量指向一块内存,这块
内存用来描述一个设备的相关的内容,所以也可以
认为HDC定义的是一个指针;而CDC类定义一个对象,
这个对象拥有HDC定义的一个设备描述表,同时也包
含与HDC相关的操作的函数。
这与HPEN和CPen,POINT与CPoint之间的差别是一样
的。
CDC是对hDC的相关操作进行封装,例如CDC的一个TextOut函数隐去其错误检测,完全可以简化到这样程度
CDC:TextOut(intx,inty,constCString&str)
{
TextOut(m_hDC,x,y,(LPCTSTR)str,str.GetLength());
}
m_hDC就是CDC的成员变量HDCm_hDC;
CDC有一个operatorHDC()const{returnm_hDC;}
你可以把它当成一个HDC使用
CDC:TextOut(intx,inty,constCString&str)
{
TextOut(m_hDC,x,y,(LPCTSTR)str,str.GetLength());
}
m_hDC就是CDC的成员变量HDCm_hDC;
CDC有一个operatorHDC()const{returnm_hDC;}
你可以把它当成一个HDC使用
3。this是dc输出目标窗口的指针,通过它可以得到窗口句柄,对象带参构造这有什么奇怪的呢?
CPaintDC 无效区dc,相当于BeginPaint, EndPaint
CClientDC 客户区dc,相当于GetDC, ReleaseDC
CWindowDC 整窗口dc, 相当于GetWindowDC, ReleaseDC
CDC 任何dc, 相当于CreateDC, DeleteDC
CPaintDC 无效区dc,相当于BeginPaint, EndPaint
CClientDC 客户区dc,相当于GetDC, ReleaseDC
CWindowDC 整窗口dc, 相当于GetWindowDC, ReleaseDC
CDC 任何dc, 相当于CreateDC, DeleteDC
本文详细解析了MFC中CFont类及其与LOGFONT、HFONT的关系,介绍了如何创建和使用字体,以及CDC类与HDC的区别。通过实例展示了如何设置字体属性,并解释了设备上下文CDC与HDC之间的转换。

950

被折叠的 条评论
为什么被折叠?



