⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch13.htm

📁 24小时学vc,英文版本.帮助vc学习者更好的掌握vc的编程方法.
💻 HTM
📖 第 1 页 / 共 3 页
字号:
match logical font attributes to the physical representation of the font. Here, again,there are three options:<UL>	<LI><TT>DEFAULT_QUALITY</TT>: Appearance doesn't matter; Windows is free to provide	a &quot;reasonable&quot; font. This is a commonly selected option and is equivalent	to using zero as a parameter.<BR>	<BR>		<LI><TT>DRAFT_QUALITY</TT>: Fast output is given higher priority than print quality.	Some effects, such as strikethrough, bold, italic, and underlined characters, are	synthesized by GDI routines if necessary.<BR>	<BR>		<LI><TT>PROOF_QUALITY</TT>: The output quality is given higher priority than output	speed. The quality of the font is more important than exact matching of the logical-font	attributes. Some effects, such as strikethrough, bold, italics, and underlined characters,	are synthesized by GDI routines if necessary.</UL><H3><FONT COLOR="#000077"><B>Font Pitch and Family Attributes</B></FONT></H3><P>All fonts have a certain pitch. When requesting a font from Windows, you havethree different choices for the pitch:<UL>	<LI><TT>DEFAULT_PITCH</TT>: Windows selects a reasonable font, based on other specified	attributes.	<LI><TT>FIXED_PITCH</TT>: The font created by Windows must have a fixed pitch.	<LI><TT>VARIABLE_PITCH</TT>: The font is specified to have a variable pitch.</UL><P>As was discussed earlier, the font family describes general characteristics fora type of font and can be used when a specific font might not be available on allmachines. Here are the values for font families:<UL>	<LI><TT>FF_DECORATIVE</TT>	<LI><TT>FF_DONTCARE</TT>	<LI><TT>FF_MODERN</TT>	<LI><TT>FF_ROMAN</TT>	<LI><TT>FF_SCRIPT</TT>	<LI><TT>FF_SWISS</TT></UL><P>The pitch attribute can be combined with a font family attribute using the bitwise<TT>OR</TT> operator, like this:</P><PRE><FONT COLOR="#0066FF"><TT>lfHeading.lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;</TT></FONT></PRE><BLOCKQUOTE>	<P><HR><B> </B><FONT COLOR="#000077"><B>CAUTION:</B></FONT><B> </B>Combining the pitch and	family attributes isn't necessary; often, the family name implies a pitch. In the	preceding example, it's possible to specify just <TT>FF_SWISS</TT>.</P>	<P><TT>FF_ROMAN</TT> and <TT>FF_SWISS</TT> always imply a variable pitch. <TT>FF_MODERN</TT>	always implies a fixed pitch. Other family types contain fonts that have both fixed	and variable pitch. <HR></BLOCKQUOTE><H3><FONT COLOR="#000077"><B>Font Weights</B></FONT></H3><P>You can specify the relative weight of a font, based on a scale from 0 to 1,000.A weight of 400 describes a normal font, whereas 700 is used for a bold font. Ifyou use 0, Windows uses a reasonable default weight for the font. Each of the weightoptions between 0 and 900 has a symbolic name, as shown in Table 13.1.<H4><FONT COLOR="#000077">Table 13.1. Symbolic names for font weights.</FONT></H4><P><TABLE BORDER="1">	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><B>Symbol</B></TD>		<TD ALIGN="LEFT" VALIGN="TOP"><B>Weight</B></TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_DONTCARE</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">0</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_THIN</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">100</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_EXTRALIGHT</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">200</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_ULTRALIGHT</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">200</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_LIGHT</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">300</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_NORMAL</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">400</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_REGULAR</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">400</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_MEDIUM</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">500</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_SEMIBOLD</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">600</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_DEMIBOLD</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">600</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_BOLD</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">700</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_EXTRABOLD</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">800</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_ULTRABOLD</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">800</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_BLACK</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">900</TD>	</TR>	<TR ALIGN="LEFT" rowspan="1">		<TD ALIGN="LEFT" VALIGN="TOP"><TT>FW_HEAVY</TT></TD>		<TD ALIGN="LEFT" VALIGN="TOP">900</TD>	</TR></TABLE></P><P>Although not every weight is available for every font, Windows tries to selecta font weight close to the requested value.<H3><FONT COLOR="#000077"><B>Other Font Attributes</B></FONT></H3><P>It's possible to define the escapement and orientation of a font. The <I>escapement</I>is the angle, in tenths of a degree, formed by a line of text in relation to thebottom of the page. Each degree in escapement adds 10 to the parameter value. Forexample, an escapement parameter value of 900 (90deg. x 10) describes a font whereeach line of text is rotated 90 degrees counterclockwise. The <I>orientation</I>of a font is similar to the escapement, but applies to each character rather thanto an entire line of text.</P><P>Italic, underline, and strikethrough effects are assigned by specifying <TT>TRUE</TT>or <TT>FALSE</TT> for each of these attributes.</P><P>Finally, you can specify the typeface name. This is the name of a font that shouldbe a good match for the parameters specified in other parts of the font description.If this parameter is set to <TT>NULL</TT>, Windows uses the other parameters whensearching for a font. If you specify a name, that name is used to search for a font.If a font with that name is found, it is used.<H2><FONT COLOR="#000077"><B>Creating Fonts for Windows Programs</B></FONT></H2><P>There are two ways to create fonts using MFC. If you are creating a small numberof fonts, you can use the <TT>CFont</TT> class and its <TT>CreateFont</TT> memberfunction. If you're creating several similar fonts or a large number of fonts, youcan use the <TT>LOGFONT</TT> structure.<H3><FONT COLOR="#000077"><B>Creating a Font Using <TT>CFont</TT></B></FONT></H3><BLOCKQUOTE>	<P><HR><B> </B><FONT COLOR="#000077"><B>Time Saver:</B></FONT><B> </B>The first time you	consider creating a <TT>CFont</TT> object, you might be intimidated by the large	number of parameters it takes. Don't worry; most of the parameters can actually be	set to default values or zero, and the Windows font mapper selects a font for you.	<HR></BLOCKQUOTE><P>To illustrate this, Listing 13.1 creates two fonts. One font, <TT>fntArial</TT>,uses zero for all the parameters and specifies a font name. The other font, <TT>fntBoldSwiss</TT>,specifies many of the characteristics of a desired font. In both cases the font mapperdetermines a reasonable font. Add the source code from Listing 13.1 to the <TT>CDCTestView::OnDraw</TT>function in the DCTest project that was originally created in Hour 11, &quot;DeviceContexts.&quot;<H4><FONT COLOR="#000077">TYPE: Listing 13.1. Two different ways to create a CFontobject.</FONT></H4><PRE><FONT COLOR="#0066FF"><TT>void CDCTestView::OnDraw(CDC* pDC)</TT><TT>{</TT><TT>    pDC-&gt;SetMapMode( m_nMapMode );</TT><TT>    CRect rcClient;</TT><TT>    GetClientRect( rcClient );</TT><TT>    pDC-&gt;DPtoLP( rcClient );</TT><TT>    COLORREF clrOld = pDC-&gt;SetTextColor( m_clrChoice );</TT><TT>    int nOldMode = pDC-&gt;SetBkMode( TRANSPARENT );</TT><TT>    CFont   fntArial, fntBoldSwiss;</TT><TT>    fntArial.CreateFont( 0, 0, 0, 0, 0, 0, 0, 0,</TT><TT>                         0, 0, 0, 0, 0, &quot;Arial&quot; );</TT><TT>    fntBoldSwiss.CreateFont( rcClient.Height()/20, 0, 0, 0,</TT><TT>                        FW_BOLD, TRUE, FALSE, 0, ANSI_CHARSET,</TT><TT>                        OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,</TT><TT>                        DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS,</TT><TT>                        NULL );</TT><TT>    CString szMsg = &quot;Hello! Change the color and mapping mode&quot;;</TT><TT>    CFont* pOldFont = pDC-&gt;SelectObject( &amp;fntArial );</TT><TT>    int cy = rcClient.Height()/4;</TT><TT>    pDC-&gt;TextOut( 0, cy, szMsg );</TT><TT>    pDC-&gt;SelectObject( &amp;fntBoldSwiss );</TT><TT>    TEXTMETRIC tm;</TT><TT>    pDC-&gt;GetTextMetrics(&amp;tm);</TT><TT>    cy += tm.tmHeight + tm.tmExternalLeading;</TT><TT>    pDC-&gt;TextOut( 0, cy , szMsg );</TT><TT>    // Restore the old GDI objects</TT><TT>    pDC-&gt;SelectObject( pOldFont );</TT><TT>    pDC-&gt;SetTextColor( clrOld );</TT><TT>    pDC-&gt;SetBkMode( nOldMode );</TT></FONT></PRE><P><FONT COLOR="#0066FF"><TT>}</TT></FONT><BLOCKQUOTE>	<P><HR><B> </B><FONT COLOR="#000077"><B>CAUTION:</B></FONT><B> </B>As with all GDI objects,	you must save the original font that is returned when a new font is selected into	a device context. If you fail to select the original font into the device context	when you're finished with the DC, you will create a resource leak. <HR></BLOCKQUOTE><H3><FONT COLOR="#000077"><B>Creating a Font Using a <TT>LOGFONT</TT> Structure</B></FONT></H3><P>The <TT>LOGFONT</TT> structure is often used to describe a font. Just as the <TT>LOGBRUSH</TT>structure discussed in Hour 12 was used to describe a particular brush, the <TT>LOGFONT</TT>structure is used to describe a particular font. A <TT>LOGFONT</TT> isn't a font;it's just a description, so it contains members for all the attributes availablefor a font.</P><P>Using a <TT>LOGFONT</TT> simplifies creating fonts because many of the attributesfor a series of fonts can be shared. Listing 13.2 is a version of <TT>CDCTestView::OnDraw</TT>that uses a <TT>LOGFONT</TT> structure to create several different fonts.<H4><FONT COLOR="#000077">TYPE: Listing 13.2. Using a LOGFONT structure to createfonts.</FONT></H4><PRE><FONT COLOR="#0066FF"><TT>void CDCTestView::OnDraw(CDC* pDC)</TT><TT>{</TT><TT>    CRect rcClient;</TT><TT>    GetClientRect( rcClient );</TT><TT>    pDC-&gt;DPtoLP( rcClient );</TT><TT>    COLORREF clrOld = pDC-&gt;SetTextColor( m_clrChoice );</TT><TT>    int nOldMode = pDC-&gt;SetBkMode( TRANSPARENT );</TT><TT>    CString szMsg = &quot;Hello! I'm an Arial font&quot;;</TT><TT>    CFont   fntArial;</TT><TT>    LOGFONT lf;</TT><TT>    ZeroMemory( &amp;lf, sizeof(LOGFONT) );</TT><TT>    lstrcpy( lf.lfFaceName, &quot;Arial&quot; );</TT><TT>    fntArial.CreateFontIndirect( &amp;lf );</TT><TT>    CFont* pOldFont = pDC-&gt;SelectObject( &amp;fntArial );</TT><TT>    pDC-&gt;TextOut( rcClient.Width()/2, rcClient.Height()/2, szMsg );</TT><TT>    pDC-&gt;SelectObject( pOldFont );</TT>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -