?? vctip6.html
字號:
<p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">} ;</font> </p><p><font SIZE="+0">其次,在類的構造函數中,初始化數據中。</font> </p><p><font SIZE="+0" FACE="Times New Roman">CMyListBox : : CMyListBox ()</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Initialize data members .</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_clrFore =RGB (255 , 255 , 0) ; // yellow text</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_clrBack=RGB (0 , 0 , 255) ; // blue background</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_brush . CreateSolidBrush (m _clrBack );</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">最后,使用<font FACE="Times New Roman">ClassWizard</font>處理反射的<fontFACE="Times New Roman">WM_CTLCOLOR(=WM_CTLCOLOR)</font>消息并指定新的繪畫屬性。</font> </p><p><font SIZE="+0" FACE="Times New Roman">HBRUSH CMyListBox : : CtlColor (CDC* pDC, UINT nCtlColor )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">pDC</font>—<font FACE="Times New Roman">>SetTextColor (m_clrFore);</font></font> </p><p><font SIZE="+0"><font FACE="Times New Roman">pDC</font>—<font FACE="Times New Roman">>SetBkColor (m_clrBack);</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">return (HBRUSH) m_brush.GetSafeHandle ()</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">現在,控件可以自己決定如何繪畫,與父窗口無關。</font> </p><p><a NAME="tip45"></a><b><font SIZE="+2"><font FACE="Times New Roman">45</font><fontFACE="黑體">、當向列表框中添加多個項時如何防止閃爍</font></font></b> </p><p><font SIZE="+0">調用<font FACE="Times New Roman">CWnd::SetRedraw </font>清除重畫標志可以禁止<fontFACE="Times New Roman">CListBox</font>(或者窗口)重畫。當向列表框添加幾個項時,用戶可以清除重畫標志,然后添加項,最后恢復重畫標志。為確保重畫列表框的新項,調用<fontFACE="Times New Roman">SetRedraw (TRUE) </font>之后調用<font FACE="Times New Roman">CWnd::Invalidate</font>。</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Disable redrawing.</font> </p><p><font SIZE="+0" FACE="Times New Roman">pListBox->SetRedraw (FALSE);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Fill in the list box gere</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Enable drwing and make sure list box is redrawn.</font> </p><p><font SIZE="+0" FACE="Times New Roman">pListBox->SetRedraw (TRUE);</font> </p><p><font SIZE="+0" FACE="Times New Roman">pListBox->Invalidate ();</font> </p><p><a NAME="tip46"></a><b><font SIZE="+2"><font FACE="Times New Roman">46</font><fontFACE="黑體">、如何向編輯控件中添加文本</font></font></b> </p><p><font SIZE="+0">由于沒有<font FACE="Times New Roman">CEdit:: AppendText</font>函數,用戶只好自己做此項工作。調用<fontFACE="Times New Roman">CEdit:: SetSel</font>移動到編輯控件末尾,然后調用<fontFACE="Times New Roman">CEdit:: ReplaceSel</font>添加文本。下例是<fontFACE="Times New Roman">AppendText </font>的一種實現方法:</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CMyEdit:: AppendText (LPCSTR pText)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">int nLen=GetWindowTextLength ();</font> </p><p><font SIZE="+0" FACE="Times New Roman">SetFocus ();</font> </p><p><font SIZE="+0" FACE="Times New Roman">SetSel (nLen, nLen);</font> </p><p><font SIZE="+0" FACE="Times New Roman">ReplaceSel (pText);</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip47"></a><b><font SIZE="+2"><font FACE="Times New Roman">47</font><fontFACE="黑體">、如何訪問預定義的</font><font FACE="Times New Roman">GDI</font><fontFACE="黑體">對象</font></font></b> </p><p><font SIZE="+0">可以通過調用<font FACE="Times New Roman">CDC:: SlectStockObject</font>使用<fontFACE="Times New Roman">Windows</font>的幾個預定義的對象,諸如刷子、筆以及字體。下例使用了<fontFACE="Times New Roman">Windows</font>預定義的筆和刷子<font FACE="Times New Roman">GDI</font>對象在視窗中畫一個橢圓。</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Draw ellipse using stock black pen and gray brush.</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CSampleView:: OnDraw (CDC* pDC)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Determine size of view.</font> </p><p><font SIZE="+0" FACE="Times New Roman">CRect rcView;</font> </p><p><font SIZE="+0" FACE="Times New Roman">GetClientRect (rcView);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Use stock black pen and stock gray brush to draw ellipse.</font> </p><p><font SIZE="+0" FACE="Times New Roman">pDC->SelectStockObject (BLACK_PEN);</font> </p><p><font SIZE="+0" FACE="Times New Roman">pDC->SelectStockObject (GRAY_BRUSH)</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Draw the ellipse.</font> </p><p><font SIZE="+0" FACE="Times New Roman">pDC->Ellipse (reView);</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">也可以調用新的<font FACE="Times New Roman">SDK</font>函數<fontFACE="Times New Roman">GetSysColorBrush</font>獲取一個系統顏色刷子,下例用背景色在視窗中畫一個橢圓:</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CsampleView:: OnDraw (CDC* pDC)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Determine size of view.</font> </p><p><font SIZE="+0" FACE="Times New Roman">CRect rcView;</font> </p><p><font SIZE="+0" FACE="Times New Roman">GetClientRect (rcView);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Use background color for tooltips brush.</font> </p><p><font SIZE="+0" FACE="Times New Roman">CBrush * pOrgBrush=pDC->SelectObject (</font> </p><p><font SIZE="+0" FACE="Times New Roman">CBrush::FromHandle (::GetSysColorBrush (COLOR_INFOBK)));</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Draw the ellipse.</font> </p><p><font SIZE="+0" FACE="Times New Roman">pDC->Ellipse (rcView);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Restore original brush.</font> </p><p><font SIZE="+0" FACE="Times New Roman">pDC->SelectObject (pOrgBrush);</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip48"></a><b><font SIZE="+2"><font FACE="Times New Roman">48</font><fontFACE="黑體">、如何獲取</font><font FACE="Times New Roman">GDI</font><fontFACE="黑體">對象的屬性信息</font></font></b> </p><p><font SIZE="+0">可以調用<font FACE="Times New Roman">GDIObject:: GetObject</font>。這個函數將指定圖表設備的消息寫入到緩沖區。下例創建了幾個有用的輔助函數。</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Determine if font is bold.</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL IsFontBold (const CFont&font)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">LOGFONT stFont;</font> </p><p><font SIZE="+0" FACE="Times New Roman">font.GetObject (sizeof (LOGFONT), &stFont);</font> </p><p><font SIZE="+0" FACE="Times New Roman">return (stFont.lfBold)? TRUE: FALSE;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Return the size of a bitmap.</font> </p><p><font SIZE="+0" FACE="Times New Roman">CSize GetBitmapSize (const CBitmap&bitmap)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">BITMAP stBitmap;</font> </p><p><font SIZE="+0" FACE="Times New Roman">bitmap.GetObject (sizeof (BITMAP), &stBitmap);</font> </p><p><font SIZE="+0" FACE="Times New Roman">return CSize (stBitmap.bmWidth, stBitmap. bmHeight);</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Create a pen with the same color as a brush.</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CreatePenFromBrush (Cpen&pen, cost Cbrush&brush)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">LOGBRUSH stBrush;</font> </p><p><font SIZE="+0" FACE="Times New Roman">brush.Getobject (sizeof (LOGBRUSH), &stBrush);</font> </p><p><font SIZE="+0" FACE="Times New Roman">return pen. Createpen (PS_SOLID, 0, stBrush.ibColor);</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><hr><p> <a HREF="skill.htm">返回上頁</a> </p></body></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -