實(shí)驗(yàn)11 進(jìn)展條、滾動(dòng)條和滑動(dòng)條.doc_第1頁
實(shí)驗(yàn)11 進(jìn)展條、滾動(dòng)條和滑動(dòng)條.doc_第2頁
實(shí)驗(yàn)11 進(jìn)展條、滾動(dòng)條和滑動(dòng)條.doc_第3頁
實(shí)驗(yàn)11 進(jìn)展條、滾動(dòng)條和滑動(dòng)條.doc_第4頁
實(shí)驗(yàn)11 進(jìn)展條、滾動(dòng)條和滑動(dòng)條.doc_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

實(shí)驗(yàn)11 進(jìn)展條、滾動(dòng)條和滑動(dòng)條實(shí)驗(yàn)內(nèi)容設(shè)計(jì)一個(gè)對(duì)話框應(yīng)用程序Ex_Color,其運(yùn)行結(jié)果如圖T11.1所示。操作滾動(dòng)條、滑動(dòng)條和進(jìn)展條控件可以調(diào)整RGB顏色的3個(gè)顏色分量:R(紅色分量)、G(綠色分量)和B(藍(lán)色分量),并根據(jù)用戶指定的顏色填充控件。實(shí)驗(yàn)準(zhǔn)備和說明(1) 在學(xué)習(xí)完第四章內(nèi)容之后計(jì)息本次實(shí)驗(yàn)。(2) 構(gòu)思本次上機(jī)所需要的程序。實(shí)驗(yàn)步驟1. 創(chuàng)建工作文件夾打開計(jì)算機(jī),在”D:Visual C+程序LiMing” 文件夾中創(chuàng)建一個(gè)新子文件夾“實(shí)驗(yàn)11”。 2. 設(shè)計(jì)對(duì)話框設(shè)計(jì)對(duì)話框的具體步驟如下。(1) 啟動(dòng)Visual C+6.0(2) 創(chuàng)建一個(gè)默認(rèn)的基于對(duì)話框應(yīng)用程序項(xiàng)目Ex_Color ,在“新建”對(duì)話框中將項(xiàng)目文件夾定位到D:Visual C+程序LiMing實(shí)驗(yàn)11(3) 在打開的對(duì)話框資源模板中,將對(duì)話框的標(biāo)題屬性改為“控件顏色設(shè)置”,刪除“取消”按鈕,并將“確定”按鈕的標(biāo)題屬性改為“退出”。(4) 顯示對(duì)話框網(wǎng)絡(luò),調(diào)整對(duì)話框的大小,參照如圖T11.1所示控件的布局,向?qū)υ捒蛱砑尤氡鞹11.1所示的控件,調(diào)整控件的位置。(5) 打開MFC ClassWizard,在MFC ClassWizard 的Menber Variables頁面中,確定Class name 中是否已選擇了Cex_InputDIg,選中所需的控件ID標(biāo)識(shí)符,雙擊鼠標(biāo)或單擊Add Variables 按鈕。依次為如表T11.2所示的控件增加成員變量。3. 增加成員函數(shù)Draw增加成員函數(shù) Draw 的具體步驟如下。(1)展開項(xiàng)目工作區(qū)窗口Class View中的Cex_ColorDlg類的所有結(jié)點(diǎn)。(2)用鼠標(biāo)右鍵單擊Cex_ColorDlg 類結(jié)點(diǎn),從彈出的快捷菜單中選擇” Add Member Function(增加成員變量),彈出如圖T11.2所示的Add Member Function 對(duì)話框。(3)在Function Type 框中輸入成員函數(shù)類型 void ,在Function Declaration 框中輸入成員函數(shù)聲明者Draw(UINT nID)。保留默認(rèn)的訪問方式(Access)為Public,單擊“OK”按鈕。(4)定位在Draw 函數(shù),添加下列代碼:void CEx ColorDlg:Draw(UIN nID)CWnd*pWnd=GetDLGitem(Nid);CDC*Pdc=pWnd-GetDC();/ 獲得窗口當(dāng)前的設(shè)備環(huán)境指針CBrush drawBrush;/定義畫刷變量drawBrush.CrenateSolidBrush(RGB(m_nRValue,m_nGValue,m_nBValue);/創(chuàng)建一個(gè)填充色畫刷。RGB是一個(gè)顏色宏,用于將指定的紅、綠、藍(lán)3種顏色分量轉(zhuǎn)換成一個(gè)32位的RGB顏色值CBrush*pOldBrush=pDC-SlelectObject(&drawBrush);CRect rcClient;pWnd-GetClientRect(rcClient);/獲取當(dāng)前控件的客房區(qū)大小PDC-Rectangle(rcClient);/用當(dāng)前畫刷填充指定的矩形框PDC-SelectObject(pOldBrush );恢復(fù)原來的畫刷 4.添加初始化代碼添加初始化代碼的具體步驟如下。(1) 在CEx_ColorDlg:OnInitDialog中添加下列代碼:BOOL CEx_ColorDlg:OnInitDialog ()CDialog: OnInitDialog();/設(shè)置滾動(dòng)條、滑動(dòng)條、進(jìn)展條、旋轉(zhuǎn)按鈕的范圍和當(dāng)前位置m_Scroll.SetScrollRange(0,255);m_Scroll.SetScrollPos(m_nRValue);m_Slider.SetRange(0,255);m_Slider.SetPos(m_nGValue);m_Progress.SetRange(0,255);m_Progress.SetPos(m_nBValue);m_Spin.SetRange(0,255);m_Spin.SetPos(m_nBValue);return TRUE; /return TRUE unless you set the focus to a control(2)編譯運(yùn)行。 5完善代碼完善代碼的具體步驟如下。(1) 用MFC ClassWizard 在CEX_ColorDlg 類中為編輯框IDC_EDIT_R、IDC_EDIT_G和IDC_EDIT_B添加EN_CHANGE的消息映射,使用它們的消息映射函數(shù)名都設(shè)為OnChangeEdit,并增加下列代碼:void CEx ColorDlg:OnChangeEdit()UpdateData();m_Scroll.SetScrollPos(m_nRValue);m_Slider.SetPos(m_nGValue);m_Progress.SetPos(m_nBValue);m_Spin.SetPos(m_nBValue);Draw(IDC_DRAW);(2)用MFC ClassWizard 在CEX_ColorDlg 中為旋轉(zhuǎn)按鈕控件 IDC_SPIN 添加 UDN_DELTAPOS消息映射,并在映射函數(shù)中添加下列代碼: void CEx ColorDlg:OnDeltaposSpin1(NMHDR*PNMHDR,LRESULT*pResult)NM_NPDOWN*pNMUpDown=(NM_UPDOWN*)PNMHDR;UpdateData(TRUE);/將控件的內(nèi)容保存到變量中m_nBValue+=pNMUpDown-iDelta;if(m_nBValue255) m_nBValue=255;UpdateData(FALSE);OnChangeEdit();*pResult=0;(3)用MFC Class Wizar 在CEx_ColorDlg 中為添加WM_HSCROLL消息映射,并的映射函數(shù)中添加下列代碼: void CEx ColorDlg:OnHScroll(UINT nSBCode,UINT nPos, CScrollBar*pScrollBar)int nID=pScrollBAR-GetDlgCtrllD(); if ( nID=IDC_SLIDER1) /是滑動(dòng)條產(chǎn)生水平滾動(dòng)消息M_nGValue=m_Slider.GetPos();/獲得滑動(dòng)條當(dāng)前的位置if ( nID=IDC_SCROLLBAR1) /是滾動(dòng)條產(chǎn)生水平滾動(dòng)消息switch(nSBCode)case SB_LINELEFT: m_nRValue;/單擊滾動(dòng)條左邊箭頭 break; case SB_LINERIGHT: m_nRValue+; break; /單擊滾動(dòng)條右邊箭頭 case SB_PAGELEFT: m_nRValue-=10; break; case SB_PAGERIGHT: m_nRVaue+=10; break; case SB_THUMBTRACK: m_nRValue=nPos; break; if (m_nRValue255) m_nRValue=255; m_Scroll.SetScrollPos(m_nRValue); UpdateData(FALSE); OnChangeEdit(); Cdialog:OnHScroll(nSBCode,nPos,pScrollBar);(4)編譯運(yùn)行并測試,如圖T11.1所示。但若用另一個(gè)窗口去遮擋Ex_Color對(duì)話框時(shí),靜態(tài)文本控件中的顏色又變成了默認(rèn)的灰色,這是因?yàn)楫?dāng)一個(gè)對(duì)話框被遮擋時(shí),系統(tǒng)認(rèn)為此時(shí)對(duì)話框窗口無效,會(huì)自動(dòng)調(diào)用OnPaint函數(shù)進(jìn)行刷新。因此,需要再OnPaint函數(shù)中調(diào)用前面添加的Draw函數(shù),如下列代碼:void Cex_ColorDlg:OnPaint() if (IsIconic() else Cdialog:OnPaint(); CWnd*pWnd=GetDlgItem(IDC_DRAW); pWnd-UpdateWindow(); Draw(IDC_DRAWJ); 需要說明的是; 當(dāng)需要更新或重新繪制窗口的外觀時(shí),應(yīng)用程序會(huì)發(fā)送WM_PAINT消息。用MFCClassWizard在對(duì)話框中映射WM_PAINT消息的目的是執(zhí)行用戶自己的繪圖代碼。但基于對(duì)話框應(yīng)用程序的框架中,WM_PAINT消息映射已自動(dòng)添加過了。 在對(duì)話框中的空間驚醒繪畫時(shí),為了防止Windows用系統(tǒng)默認(rèn)的顏色向?qū)υ捒蜻M(jìn)行重復(fù)繪制,用戶須調(diào)用UpdateWindow(更新窗口)函數(shù)來達(dá)到這一效果。UpdateWindow是CWnd的一個(gè)無參數(shù)的成員函數(shù),其目的是繞過系統(tǒng)的消息列隊(duì),而直接發(fā)送或停止發(fā)送WM_PAINT消息,當(dāng)窗口沒有需要更新的區(qū)域時(shí),就停止發(fā)送。這樣,當(dāng)用戶繪制完圖形時(shí),由于沒有WM_PAINT消息的發(fā)生,系統(tǒng)也就不會(huì)用默認(rèn)的顏色對(duì)窗口進(jìn)行重復(fù)繪制。 像所有的窗口一樣,如果對(duì)話框中的任何部分變?yōu)闊o效(即需要更新)時(shí),對(duì)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論