版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、如何一個(gè)創(chuàng)建三態(tài)下壓按鈕可以使用新的BS_PUSHBUTTON格位和檢測框以及按鈕來創(chuàng)建一個(gè)三態(tài)下 壓 按鈕。這很容易,只需將檢測框和按鈕拖拉到對(duì)話中并指定屬性Pushlike 即可42、。不用任何附加程序就可以成為三態(tài)下壓按鈕。如何動(dòng)態(tài)創(chuàng)建控件分配一個(gè)控件對(duì)象的實(shí)例并調(diào)用其 Create 成員函數(shù)。開發(fā)者最容易忽略兩忘記指定WS_VISBL標(biāo)簽和在棧中分配控件對(duì)象。下例動(dòng)態(tài)地創(chuàng)建一個(gè)下壓件 事: 按 鈕控件:/In class declaration (.H file ). private :CButton* m _pButton ;/In class implementation (.cp
2、p file ) . m_pButton =new CButton ; ASSERT_VALID (m_pButton);I WS_VISIBLE Im_pButton >Create (_T ("Button Title ") , WS_CHILD BS_PUSHBUTTON.Crect ( 0, 0, 100 , 24) , this , IDC _MYBUTTON ) 43、如何限制編輯框中的準(zhǔn)許字符如果用戶在編輯控件中只允許接收數(shù)字, 可以使用一個(gè)標(biāo)準(zhǔn)的編輯控件并指 定新的創(chuàng)建標(biāo)志ES_NUMBEF它是Windows95新增加的標(biāo)志,該標(biāo)志限制 編輯 控 件只
3、按收數(shù)字字符。如果用戶需要復(fù)雜的編輯控件,可以使用 Microsoft 的屏 蔽編輯控件,它是一個(gè)很有用的 OLE定制控件。如果希望不使用 OLE 定制控件自己處理字符,可以派生一個(gè) CEdit 類并處 理WM_CHAR息,然后從編輯控件中過濾出特定的字符。首先,使用ClassWizard建 立一個(gè) CEdit 的派生類,其次,在對(duì)話類中指定一個(gè)成員變量將編輯控件分類 在OnInitdialog 中調(diào)用 CWnd: : SubclassDlgItem ./In your dialog class declaration (.H file ) private :CMyEdit m_wndEdit
4、 ; / Instance of your new edit control ./In you dialog class implementation (.CPP file ) BOOL CSampleDialog : : OnInitDialog ( ) /Subclass the edit lontrod . m_wndEdit .SubclassDlgItem (IDC_EDIT,this );使用Classwizard處理WM_CHAR息,計(jì)算nChar參量并決定所執(zhí)行的操作, 用戶可以確定是否修改、傳送字符。下例說明了如何顯示字母字符,如果字符是字 母字符,則調(diào)用CWnd ; On
5、Char,否則不調(diào)用 On Char./Only display alphabetic dharacters .void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UITN nFlags )/Determine if nChar is an alphabetic character .if (: : IsCharAlpha ( ( TCHAR) nChar ) )CEdit : : OnChar (nChar, nRepCnt , nFlags );如果要修改字符,則不能僅僅簡單地用修改過的nChar調(diào)用CEdit :OnChar,然后 C
6、Edit: : On Char調(diào)用 CWnd: Default 獲取原來的 wP aram 和 lP aram 的 值,這樣是不行的。要修改一個(gè)字符,需要首先修改nChar,然后用修改過的nChar 調(diào)用CWnd: : DefWindowProc。下例說明了如何將字符轉(zhuǎn)變?yōu)榇髮懀?/Make all characters uppercasevoid CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UINT nFlags ) /Make sure character is uppercase .if (: : IsCharAlpha ( .( TC
7、HAR) nChar) nChar=: : CharUpper (nChar ) ;/Bypass default OnChar processing and directly call/default window proc.DefWindProc (WM_CHAR, nChar , MAKELPARAM (nRepCnt , nFlags ) ; 44、如何改變控件的顏色有兩種方法。其一,可以在父類中指定控件的顏色,或者利用MFC4.0新的消息反射在控件類中指定顏色。當(dāng)控件需要重新著色時(shí),工作框調(diào)用父窗口(通常是對(duì)話框)的CWnd: :OnCrtlColor, 可以在父窗口類中重置該函數(shù)并
8、指定控件的新的繪畫屬 性。例如,下述代碼將對(duì)話中的所有編輯控件文本顏色改為紅色: HBRUSHCAboutDig : : OnCtlColor (CDC* pDCM, CWnd* pWnd, UINT nCtlColor)HBRUSH hbr = CDialog : : OnCtlColor (pDC, pWnd , nCtlColor );/Draw red text for all edit controls .if (nCtlColor= = CTLCOLOR_EDIT )pDC> SetTextColor (RGB (255 , 0 , 0 , ) ) ;return hbr ;
9、所以然而,由于每個(gè)父窗口必須處理通知消息并指定每個(gè)控件的繪畫屬性, ,這種方法不是完全的面向?qū)ο蟮姆椒ā?控件處理該消息并指定繪畫屬性更合情 合理。消息反射允許用戶這樣做。通知消息首先發(fā)送給父窗口,如果父窗口沒有處 理則發(fā)送給控件。創(chuàng)建一個(gè)定制彩色列表框控件必須遵循下述步驟。首先,使用 ClassWizard 創(chuàng)建一個(gè) CListBox 的派生類并為該類添加下述數(shù) 據(jù)成員。class CMyListBox ; publilc CListBoxprivate;COLORREF m_clrFor ; / foreground colorCOLORREF m_clrBack ; /backgroun
10、d color Cbrush m_brush ;/background brush ; 其次,在類的構(gòu)造函數(shù)中,初始化數(shù)據(jù)中。CMyListBox : : CMyListBox ()/Initialize data members .m_clrFore =RGB (255 , 255 , 0) ; / yellow text m_clrBack=RGB (0 , 0 , 255) ; / blue background m_brush . CreateSolidBrush (m _clrBack );最后,使用 Classwizard 處理反射的 WM_CTLCOLOR(二WM_CTLCOiO
11、R指 定新的繪畫屬性。HBRUSH CMyListBox : : CtlColor (CDC* pDC, UINT nCtlColor ) pDC >SetTextColor (m_clrFore);pDC >SetBkColor (m_clrBack);return (HBRUSH) m_brush.GetSafeHandle ()現(xiàn)在,控件可以自己決定如何繪畫,與父窗口無關(guān)。45、當(dāng)向列表框中添加多個(gè)項(xiàng)時(shí)如何防止閃爍調(diào)用 CWnd:SetRedraw 清除重畫標(biāo)志可以禁止 CListBox( 或者窗口)重畫。 當(dāng)向列表框添加幾個(gè)項(xiàng)時(shí), 用戶可以清除重畫標(biāo)志, 然后添加項(xiàng), 最后
12、恢復(fù)重畫 標(biāo)志。為確保重畫列表框的新項(xiàng),調(diào)用 SetRedraw (TRUE) 之后調(diào)用 CWnd:Invalidate 。/Disable redrawing. pListBox->SetRedraw (FALSE);/Fill in the list box gere/Enable drwing and make sure list box is redrawn. pListBox->SetRedraw (TRUE); pListBox->Invalidate ();46、如何向編輯控件中添加文本由于沒有 CEdit: AppendText 函數(shù),用戶只好自己做此項(xiàng)工作。
13、調(diào)用 CEdit:SetSel 移動(dòng)到編輯控件末尾,然后調(diào)用 CEdit: ReplaceSel 添加文本。下例是 AppendText 的一種實(shí)現(xiàn)方法:void CMyEdit: AppendText (LPCSTR pText) int nLen=GetWindowTextLength ();SetFocus ();SetSel (nLen, nLen);ReplaceSel (pText);47、如何訪問預(yù)定義的 GDI 對(duì)象可以通過調(diào)用CDC: SlectStockObject使用Windows的幾個(gè)預(yù)定義的對(duì)象, 諸如刷子、筆以及字體。下例使用了 Windows預(yù)定義的筆和刷子GDI
14、對(duì)象在視窗中 畫一個(gè)橢圓。/Draw ellipse using stock black pen and gray brush. void CSampleView: OnDraw (CDC* pDC) /Determine size of view.CRect rcView;GetClientRect (rcView);/Use stock black pen and stock gray brush to draw ellipse. pDC->SelectStockObject (BLACK_PEN);pDC->SelectStockObject (GRAY_BRUSH)/Dra
15、w the ellipse.pDC->Ellipse (reView);也可以調(diào)用新的SDK函數(shù)GetSysColorBrush獲取一個(gè)系統(tǒng)顏色刷子,下例 用背景色在視窗中畫一個(gè)橢圓:void CsampleView: OnDraw (CDC* pDC)/Determine size of view.CRect rcView;GetClientRect (rcView);/Use background color for tooltips brush. CBrush * pOrgBrush=pDC->SelectObject (CBrush:FromHandle (:GetSysC
16、olorBrush (COLOR_INFOBK);/Draw the ellipse. pDC->Ellipse (rcView);/Restore original brush. pDC->SelectObject (pOrgBrush);48、如何獲取 GDI 對(duì)象的屬性信息可以調(diào)用 GDIObject: GetObject 。這個(gè)函數(shù)將指定圖表設(shè)備的消息寫入到 緩沖區(qū)。下例創(chuàng)建了幾個(gè)有用的輔助函數(shù)。/Determine if font is bold.BOOL IsFontBold (const CFont&font)LOGFONT stFont;font.GetOb
17、ject (sizeof (LOGFONT), &stFont); return (stFont.lfBold)? TRUE: FALSE;/Return the size of a bitmap.CSize GetBitmapSize (const CBitmap&bitmap) BITMAP stBitmap;bitmap.GetObject (sizeof (BITMAP), &stBitmap); return CSize (stBitmap.bmWidth, stBitmap. bmHeight);/Create a pen with the same col
18、or as a brush.BOOL CreatePenFromBrush (Cpen&pen, cost Cbrush&brush) LOGBRUSH stBrush;brush.Getobject (sizeof (LOGBRUSH), &stBrush);return pen. Createpen (PS_SOLID, 0, stBrush.ibColor); 49、如何實(shí)現(xiàn)一個(gè)橡皮區(qū)矩形CRectTracker 是一個(gè)很有用的類,可以通過調(diào)用 CRectTracker:TrackRubberBand響應(yīng)WM_LBUTTONDOW來創(chuàng)建一個(gè)橡皮區(qū)矩形。下例表明 使
19、用CRectTracker 移動(dòng)和重置視窗中的藍(lán)色橢圓的大小是很容易的事情。 首先,在文件檔中聲明一個(gè) CRectTracker 數(shù)據(jù)成員: class CSampleView : Public CViewpublic :CrectTracker m_tracker;其次,在文檔類的構(gòu)造函數(shù)中初始化 CRectTracker 對(duì)象: CSampleDoc: CSampleDOC ()/Initialize tracker position, size and style.m_tracker.m_rect.SetRect (0, 0, 10, 10);m_tracker.m_nStyle=CRe
20、ctTracker: resizeInside | CRectTracker: dottedLine;然后,在On Draw函數(shù)中畫橢圓和蹤跡矩形:void CSampleView: OnDraw (CDC* pDC)CSampleDoc* pDoc=GetDocument ();ASSERT_VALID (pDoc);/Select blue brush into device context.CBrush brush (RGB (0, 0, 255);CBrush* pOldBrush=pDC->SelectObject (&brush);/draw ellipse in t
21、racking rectangle.Crect rcEllipse; pDoc->m_tracker.GetTrueRect (rcEllipse); pDC->Ellipse (rcEllipse);/Draw tracking rectangle.pDoc->m_tracker.Draw (pDC);/Select blue brush out of device context. pDC->Selectobject (pOldBrush);最后,使用Classwizard處理WM_LBUTTONDOWN并增加下述代碼。該 段代碼根據(jù)鼠標(biāo)擊鍵情況可以拖放、移動(dòng)或者重
22、置橢圓的大小。void CSampleView:OnLButtonDown (UINT nFlags, CPoint point)/Get pointer to document.CSampleDoc* pDoc=GetDocument ();ASSERT_VALID (pDoc);/If clicked on ellipse, drag or resize it. Otherwise create a /rubber-band rectangle nd create a new ellipse. BOOL bResult=pDoc->m_tracker.HitTest (point)!=CRectTracker:hitNothing;/Tracker rectangle changed so update views. if (bResult)pDoc->m_tracker.Track (this,point,TRue);pDoc->SetModifiedFlag ();pDoc->UpdateAllViews (NULL);elsepDoc->m-tracker.TrackRubberBand (this,point,TRUE); CView: onLButtonDown (nFlags,point);50、如何更新翻
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高空施工安全責(zé)任書范本(二零二五年度)3篇
- 2025年度個(gè)人意外傷害保險(xiǎn)合同范本(二零二五版)4篇
- 二零二五版美甲店員工離職交接合同4篇
- 建筑資質(zhì)維護(hù)勞務(wù)協(xié)議書(2篇)
- 工廠用臨時(shí)工合同范本(2篇)
- 物業(yè)公司2025年度學(xué)校門衛(wèi)保養(yǎng)維護(hù)合同3篇
- 鋁合金百葉施工方案
- 臨戰(zhàn)水平封堵施工方案
- 二零二五版白灰礦產(chǎn)資源開采合同協(xié)議書3篇
- 2024年浙江省無人機(jī)應(yīng)用技能競賽備考試題庫(含各題型)
- 勞務(wù)協(xié)議范本模板
- 2025大巴車租車合同范文
- 人教版(2024)數(shù)學(xué)七年級(jí)上冊(cè)期末測試卷(含答案)
- 2024年國家保密培訓(xùn)
- 2024年公務(wù)員職務(wù)任命書3篇
- CFM56-3發(fā)動(dòng)機(jī)構(gòu)造課件
- 會(huì)議讀書交流分享匯報(bào)課件-《殺死一只知更鳥》
- 2025屆撫州市高一上數(shù)學(xué)期末綜合測試試題含解析
- 公司印章管理登記使用臺(tái)賬表
- 磚廠承包合同簽訂轉(zhuǎn)讓合同
- 2023年公務(wù)員多省聯(lián)考《申論》題(廣西B卷)
評(píng)論
0/150
提交評(píng)論