📄 01_9_16_3.asp.html
字号:
//rubber-band rectangle nd create a new ellipse.</td></tr></table><table width=100% ><tr><td class=a14>
BOOL bResult=pDoc->m_tracker.HitTest (point)!= CRectTracker::hitNothing</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Tracker rectangle changed so update views.</td></tr></table><table width=100% ><tr><td class=a14>
if (bResult)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
pDoc->m_tracker.Track (this,point,TRue)</td></tr></table><table width=100% ><tr><td class=a14>
pDoc->SetModifiedFlag ()</td></tr></table><table width=100% ><tr><td class=a14>
pDoc->UpdateAllViews (NULL)</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
else</td></tr></table><table width=100% ><tr><td class=a14>
pDoc->m-tracker.TrackRubberBand(this,point,TRUE)</td></tr></table><table width=100% ><tr><td class=a14>
CView:: onLButtonDown (nFlags,point)</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="50">50.如何更新翻转背景颜色的文本?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
调用CDC:: SetBkmode并传送OPAQUE用当前的背景颜色填充背景,或者调用CDC::SetBkMode并传送TRANSPAARENT使背景保持不变,这两种方法都可以设置背景模式。下例设置背景模式为TRANSPARENT,可以两次更新串,用花色带黑阴影更新文本。黑色串在红色串之后,但由于设置了背景模式仍然可见。</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
void CSampleView:: OnDraw (CDC* pDC)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
//Determint size of view.</td></tr></table><table width=100% ><tr><td class=a14>
CRect rcView</td></tr></table><table width=100% ><tr><td class=a14>
GetClientRect (rcVieew)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Create sample string to display.</td></tr></table><table width=100% ><tr><td class=a14>
CString str (_T ("Awesome Shadow Text..."))</td></tr></table><table width=100% ><tr><td class=a14>
//Set the background mode to transparent.</td></tr></table><table width=100% ><tr><td class=a14>
pDC->SetBKMode (TRANSPARENT)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Draw black shadow text.</td></tr></table><table width=100% ><tr><td class=a14>
rcView.OffsetRect (1, 1)</td></tr></table><table width=100% ><tr><td class=a14>
pDc->SetTextColor (RGB (0, 0, 0))</td></tr></table><table width=100% ><tr><td class=a14>
pDC->DrawText (str, str.GetLength (), rcView, DT_SINGLELINE | DT_CENTER | DT_VCENTER)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Draw red text.</td></tr></table><table width=100% ><tr><td class=a14>
rcView.OffsetRect (-1,-1)</td></tr></table><table width=100% ><tr><td class=a14>
pDc->SetTextColor (RGB (255, 0, 0))</td></tr></table><table width=100% ><tr><td class=a14>
pDC->DrawText (str, str.GetLength (), rcView, DT_SINGLELINE | DT_CENTER | DT_VCENTER)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="51">51.如何创建一个具有特定点大小的字体?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
可以指定字体逻辑单位的大小,但有时指定字体的点的大小可能会更方便一些。可以如下将字体的点转换为字体的高度:</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
int nHeigth=mulDiv (nPointSize, -dc.GetDeviceCaps (LOGPIXELSY), 72)</td></tr></table><table width=100% ><tr><td class=a14>
下例创建了一个8点的Apial字体:</td></tr></table><table width=100% ><tr><td class=a14>
…</td></tr></table><table width=100% ><tr><td class=a14>
CClientDC dc (AqfxGetMainWnd ())</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
m_font. CreateFont (MulDiv (8, -dc.GetDeviceCaps (LOGPIXELSY), 72), 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF-SWISS,_T("Arial"))</td></tr></table><table width=100% ><tr><td class=a14>
...</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="52">52.如何计算一个串的大小?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
函数CDC:: Det text Extent 根据当前选择的字体计算一个串的高度和宽度。如果使用的不是系统字体而是其他字体,则在调用GetTextExtent之前将字体选进设备上下文中是很重要的,否则计算高度和宽度时将依据系统字体,由此得出的结果当然是不正确的。下述样板程序当改变下压按钮的标题时动态调整按钮的大小,按钮的大小由按钮的字体和标题的大小而定。响应消息WM_SETTEXT时调用OnSetText,该消息使用ON_MESSAE宏指令定义的用户自定义消息。</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
LRESULT CMyButton:: OnSettext (WPARAM wParam, LPARAM lParam)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
//Pass message to window procedure.</td></tr></table><table width=100% ><tr><td class=a14>
LRESULT bResult=CallWindowProc (*GetSuperWndProcAddr(), m_hWnd, GetCurrentMessage() ->message,wParam,lParam)</td></tr></table><table width=100% ><tr><td class=a14>
//Get title of push button.</td></tr></table><table width=100% ><tr><td class=a14>
CString strTitle</td></tr></table><table width=100% ><tr><td class=a14>
GetWindowText (strTitle)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Select current font into device context.</td></tr></table><table width=100% ><tr><td class=a14>
CDC* pDC=GetDc ()</td></tr></table><table width=100% ><tr><td class=a14>
CFont*pFont=GetFont ()</td></tr></table><table width=100% ><tr><td class=a14>
CFont*pOldFont=pDC->SelectObject (pFont)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Calculate size of title.</td></tr></table><table width=100% ><tr><td class=a14>
CSize size=pDC->GetTextExent (strTitle,strTitle.GetLength())</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Adjust the button's size based on its title.</td></tr></table><table width=100% ><tr><td class=a14>
//Add a 5-pixel border around the button.</td></tr></table><table width=100% ><tr><td class=a14>
SetWindowPos (NULL, 0, 0, size.cx+10, size.cy+10, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE)</td></tr></table><table width=100% ><tr><td class=a14>
//Clean up.</td></tr></table><table width=100% ><tr><td class=a14>
pDC->SelectFont (pOldFont)</td></tr></table><table width=100% ><tr><td class=a14>
ReleaseDC (pDC)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
return bResult</td></tr></table><table width=100% ><tr>
<td class=a14 height="20"> }</td>
</tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="53">53.如何显示旋转文本?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
只要用户使用TrueType或者GDI笔或字体就可以显示旋转文本(有些硬件设备也支持旋转光栅字体)。LOGFONT结构中的ifEscapement成员指定了文本行和x轴的角度,角度的单位是十分之一度而不是度,例如,ifEscapement为450表示字体旋转45度。为确保所有的字体沿坐标系统的同一方向旋转,一定要设置ifEscapement成员的CLIP_LH_ANGLES位,否则,有些字体可能反向旋转。下例使用了14点Arial字体每间隔15度画一个串。</td></tr></table><table width=100% ><tr><td class=a14>
void CSampleView:: OnDraw (CDC* pDC)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
//Determine the size of the window.</td></tr></table><table width=100% ><tr><td class=a14>
CRect rcClient</td></tr></table><table width=100% ><tr><td class=a14>
GetClientRect (rcClient)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Create sample string.</td></tr></table><table width=100% ><tr><td class=a14>
CString str (_T ("Wheeee...I am rotating!"))</td></tr></table><table width=100% ><tr><td class=a14>
//Draw transparent, red text.</td></tr></table><table width=100% ><tr><td class=a14>
pDC->SetBkMode (TRANSPARENT)</td></tr></table><table width=100% ><tr><td class=a14>
pDC->SetTextColor (RGB (255,0,0))</td></tr></table><table width=100% ><tr><td class=a14>
CFont font</td></tr></table><table width=100% ><tr><td class=a14>
//font object</td></tr></table><table width=100% ><tr><td class=a14>
LOGFONT stFont //font definition</td></tr></table><table width=100% ><tr><td class=a14>
//Set font attributes that will not change.</td></tr></table><table width=100% ><tr><td class=a14>
memset (&stFont, 0, sizeof (LOGFONT))</td></tr></table><table width=100% ><tr><td class=a14>
stFont.ifheight=MulDiv (14, -pDC->GetDeviceCaps(LOGPIXELSY), 72)</td></tr></table><table width=100% ><tr><td class=a14>
stFont.ifWeight=FW_NORMAL</td></tr></table><table width=100% ><tr><td class=a14>
stFont.ifClipPrecision=LCIP_LH_ANGLES</td></tr></table><table width=100% ><tr><td class=a14>
strcpy (stFont.lfFaceName, "Arial")</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Draw text at 15degree intervals.</td></tr></table><table width=100% ><tr><td class=a14>
for (int nAngle=0 nAngle<3600 nAngle+=150)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
//Specify new angle.</td></tr></table><table width=100% ><tr><td class=a14>
stFont.lfEscapement=nAngle</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Create and select font into dc.</td></tr></table><table width=100% ><tr><td class=a14>
font.CreateFontIndirect(&stfont)</td></tr></table><table width=100% ><tr><td class=a14>
CFont* pOldFont=pDC ->SelectObject(&font)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Draw the text.</td></tr></table><table width=100% ><tr><td class=a14>
pDC->SelectObject(pOldFont)</td></tr></table><table width=100% ><tr><td class=a14>
font.DelectObjext()</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="54">54.如何正确显示包含标签字符的串?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
调用GDI文本绘画函数时需要展开标签字符,这可以通过调用CDC:: TabbedTextOut或者CDC:: DrawText并指定DT_EXPANDTABS标志来完成。TabbedTextOut函数允许指定标签位的数组,下例指定每20设备单位展开一个标签:</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
void CSampleView:: OnDraw (CDC* pDC)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
CTestDoc* pDoc=GetDocument ()</td></tr></table><table width=100% ><tr><td class=a14>
ASSERT_VALID (pDoC)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
CString str</td></tr></table><table width=100% ><tr><td class=a14>
str.Format (_T ("Cathy\tNorman\tOliver"))</td></tr></table><table width=100% ><tr><td class=a14>
int nTabStop=20 //tabs are every 20 pixels</td></tr></table><table width=100% ><tr><td class=a14>
pDC->TabbedtextOut (10, 10, str, 1, &nTabStop, 10)</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> <a name="55">55.串太长时如何在其末尾显示一个省略号?</a></b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
调用CDC:: DrawText并指定DT_END_ELLIPSIS标志,这样就可以用小略号取代串末尾的字符使其适合于指定的边界矩形。如果要显示路径信息,指定DT_END_ELLIPSIS标志并省略号取代串中间的字符。</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
void CSampleView:: OnDraw (CDC* pDC)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
CTestDoc* pDoc=GetDocument ()</td></tr></table><table width=100% ><tr><td class=a14>
ASSERT_VALID (pDoc)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Add ellpsis to end of string if it does not fit</td></tr></table><table width=100% ><tr><td class=a14>
pDC->Drawtext (CString ("This is a long string"), CRect (10, 10, 80, 30), DT_LEFT | DT_END_ELLIPSIS)</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
//Add ellpsis to middle of string if it does not fit</td></tr></table><table width=100% ><tr><td class=a14>
pDC->DrawText (AfxgetApp () ->m_pszhelpfilePath, CRect (10, 40, 200, 60), DT_LEFT | DT_PATH_ELLIPSIS)</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table>
<table width=100% >
<tr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -