版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、17.1概述概述作為一般窗口,作為一般窗口,控件控件具有通用的窗口屬性,并且可以使用具有通用的窗口屬性,并且可以使用ShowWindows()ShowWindows()和和MoveWindows()MoveWindows()等窗口管理函數(shù)來(lái)顯示或隱藏控件、改變控件的位置、等窗口管理函數(shù)來(lái)顯示或隱藏控件、改變控件的位置、尺寸以及其它操作。尺寸以及其它操作。 控件創(chuàng)控件創(chuàng)建形式建形式對(duì)話框中制定控件對(duì)話框中制定控件: :如按鈕控件如按鈕控件調(diào)用調(diào)用CreateWindows()CreateWindows()或或CreateWindowsEx()CreateWindowsEx()函數(shù)創(chuàng)建函數(shù)創(chuàng)建必須
2、指定控件的窗口類(lèi),必須指定控件的窗口類(lèi),這種窗口類(lèi)要在應(yīng)用程序這種窗口類(lèi)要在應(yīng)用程序中定義并注冊(cè),但更多的中定義并注冊(cè),但更多的是使用系統(tǒng)預(yù)定義窗口類(lèi)是使用系統(tǒng)預(yù)定義窗口類(lèi)控件控件Windows 圖形用戶界面的主要組成部分之一圖形用戶界面的主要組成部分之一用戶通過(guò)操作控件對(duì)象完成與應(yīng)用程序之間的交互用戶通過(guò)操作控件對(duì)象完成與應(yīng)用程序之間的交互體現(xiàn)了體現(xiàn)了Windows 系統(tǒng)面向?qū)ο蟮奶攸c(diǎn)。系統(tǒng)面向?qū)ο蟮奶攸c(diǎn)??丶元?dú)立控件以獨(dú)立的的子窗口子窗口或或?qū)υ捒驅(qū)υ捒騼煞N形式存在兩種形式存在第第7講講 Windows 標(biāo)準(zhǔn)控件標(biāo)準(zhǔn)控件2 應(yīng)用程序窗口可調(diào)用函數(shù)應(yīng)用程序窗口可調(diào)用函數(shù)SendMessag
3、eSendMessage向特定的子窗口發(fā)送消息,向特定的子窗口發(fā)送消息, 例如用戶單擊圓按鈕時(shí),可調(diào)用例如用戶單擊圓按鈕時(shí),可調(diào)用SendMessageSendMessage向該圓按鈕發(fā)送向該圓按鈕發(fā)送BM_SETCHECKBM_SETCHECK消息,為該按鈕設(shè)置選中符號(hào),其形式為:消息,為該按鈕設(shè)置選中符號(hào),其形式為: SendMessage (hwndRadioButton,BM_SETCHECK,1,0)SendMessage (hwndRadioButton,BM_SETCHECK,1,0);使用對(duì)話框控件時(shí),可調(diào)用使用對(duì)話框控件時(shí),可調(diào)用SendDlgItemMessage向指定的對(duì)
4、話框控件發(fā)向指定的對(duì)話框控件發(fā)送消息,其形式為:送消息,其形式為: SendDlgItemMessage (hdlg,ID,message,SendDlgItemMessage (hdlg,ID,message,wParam,lParamwParam,lParam););應(yīng)用程序向控件發(fā)送的消息的應(yīng)用程序向控件發(fā)送的消息的字參字參數(shù)數(shù)與與長(zhǎng)參數(shù)長(zhǎng)參數(shù)包含該消息的相關(guān)信息包含該消息的相關(guān)信息其含義取決于具體的控件消息其含義取決于具體的控件消息31EnableWindowEnableWindow函數(shù)函數(shù)(功能為激活或禁止窗口功能為激活或禁止窗口)BOOL EnableWindow (HWND BO
5、OL EnableWindow (HWND hwnd,BOOL ,BOOL bEnable) )激活或激活或禁止標(biāo)識(shí)禁止標(biāo)識(shí)Ture:該窗口可接收輸入該窗口可接收輸入False:禁止該窗口接收輸入禁止該窗口接收輸入2MoveWindowMoveWindow函數(shù)函數(shù)(移動(dòng)或改變窗口的大小移動(dòng)或改變窗口的大小)BOOL MoveWindowBOOL MoveWindow( (HWND hwndHWND hwnd,int X,int Y,int X,int Y,int nWidth,int nWidth,int nHeightint nHeight, ,BOOL bReprintBOOL bRepr
6、int/表明窗口移動(dòng)后是否重畫(huà)表明窗口移動(dòng)后是否重畫(huà)) ) 7.2 常用子窗口操作函數(shù)常用子窗口操作函數(shù)43SetWindowText(設(shè)置窗口的標(biāo)題或文本設(shè)置窗口的標(biāo)題或文本)BOOL SetWindowText(HWND hwnd,LPCTSTR BOOL SetWindowText(HWND hwnd,LPCTSTR lpszStringlpszString) )設(shè)置的設(shè)置的文本內(nèi)容文本內(nèi)容4GetWindowText函數(shù)函數(shù)(獲取指定窗口標(biāo)題或文本獲取指定窗口標(biāo)題或文本)int GetWindowText(HWND hwnd,LPSTR int GetWindowText(HWND h
7、wnd,LPSTR lpszStringlpszString,int ,int nMaxnMax) )存放文本字符串的緩沖區(qū)存放文本字符串的緩沖區(qū)最大可獲取的字符串長(zhǎng)度最大可獲取的字符串長(zhǎng)度對(duì)于對(duì)話框按鈕控件對(duì)于對(duì)話框按鈕控件,可調(diào)用函數(shù),可調(diào)用函數(shù)SetDlgItemTextSetDlgItemText和和GetDlgItemTextGetDlgItemText BOOL SetDlgItemText(HWND hdlg,int ID,LPCTSTR BOOL SetDlgItemText(HWND hdlg,int ID,LPCTSTR lpszStringlpszString) )Int
8、 GetDlgItemText(HWND hdlg,int ID,LPSTR Int GetDlgItemText(HWND hdlg,int ID,LPSTR lpszStringlpszString,int,int nMax nMax) ) 該函數(shù)返回從指定的控件獲取的文本字節(jié)數(shù)該函數(shù)返回從指定的控件獲取的文本字節(jié)數(shù)。5DestroyWindow函數(shù)函數(shù)關(guān)閉窗口函數(shù)關(guān)閉窗口函數(shù) BOOL DestroyWindow(HWND hwnd)BOOL DestroyWindow(HWND hwnd)如果關(guān)閉父窗如果關(guān)閉父窗口,則其中的子口,則其中的子窗口同時(shí)被關(guān)閉窗口同時(shí)被關(guān)閉5按鈕控件按鈕控件
9、普通按鈕普通按鈕圓按鈕圓按鈕復(fù)選框按鈕復(fù)選框按鈕組框按鈕組框按鈕在對(duì)話框定義中創(chuàng)建控件,其一般形式為:在對(duì)話框定義中創(chuàng)建控件,其一般形式為: Control-type Title, ID,X,Y, nWidth,nHeight ,Style控件樣式控件樣式控件的寬度與高度控件的寬度與高度控件類(lèi)型控件類(lèi)型控件標(biāo)題或內(nèi)容控件標(biāo)題或內(nèi)容控件起始坐標(biāo)控件起始坐標(biāo)按鈕控按鈕控件的創(chuàng)件的創(chuàng)建方式建方式創(chuàng)建控件型的子窗口創(chuàng)建控件型的子窗口在對(duì)話框中定義控件在對(duì)話框中定義控件創(chuàng)建并注冊(cè)一個(gè)窗口類(lèi)的實(shí)例創(chuàng)建并注冊(cè)一個(gè)窗口類(lèi)的實(shí)例創(chuàng)建并顯示窗口實(shí)例創(chuàng)建并顯示窗口實(shí)例控控 件件 類(lèi)類(lèi) 型型說(shuō)說(shuō) 明明PUSHBUTT
10、ON按按 鈕鈕 控控 件件DEFPUSHBUTTON缺缺 省省 按按 鈕鈕 控控 件件CHECKBOX復(fù)復(fù) 選選 框框 控控 件件RADIOBUTTON圓圓 按按 鈕鈕 控控 件件GROUPBOX組組 合合 框框 控控 件件LTEXT左左 對(duì)對(duì) 齊齊 靜靜 態(tài)態(tài) 控控 件件7.3 按鈕控件的分類(lèi)與創(chuàng)建按鈕控件的分類(lèi)與創(chuàng)建6按鈕控件與應(yīng)用程序之間的消息傳遞按鈕控件與應(yīng)用程序之間的消息傳遞1 接收按鈕控件消息接收按鈕控件消息 當(dāng)用戶與控件交互時(shí),控件向其父窗口發(fā)送當(dāng)用戶與控件交互時(shí),控件向其父窗口發(fā)送WM_COMMANDWM_COMMAND消息消息消息的消息的wParamwParam參數(shù)參數(shù)低字節(jié)
11、包含控件的標(biāo)識(shí)值(低字節(jié)包含控件的標(biāo)識(shí)值(ID)高字節(jié)中包含控件向父窗口發(fā)出的通知代碼高字節(jié)中包含控件向父窗口發(fā)出的通知代碼2 向按鈕控件發(fā)送消息向按鈕控件發(fā)送消息調(diào)用函數(shù)調(diào)用函數(shù)SendMessageSendMessage向按鈕控件發(fā)出消息向按鈕控件發(fā)出消息 SendMessage (hwnd,message,wParam,lParam);SendMessage (hwnd,message,wParam,lParam);設(shè)置復(fù)選框和圓按鈕的選中標(biāo)志時(shí)字參數(shù)應(yīng)取設(shè)置復(fù)選框和圓按鈕的選中標(biāo)志時(shí)字參數(shù)應(yīng)取1 SendMessage (hwnd,BM_SETCHECK,1,0);取消選中標(biāo)志時(shí)字參數(shù)
12、應(yīng)取取消選中標(biāo)志時(shí)字參數(shù)應(yīng)取0,其形式為:,其形式為: SendMessage (hwnd,BM_SETCHECK,0,0);SendMessageSendMessage使用使用字參數(shù)確定同種字參數(shù)確定同種消息中的不同動(dòng)作消息中的不同動(dòng)作對(duì)話框按鈕控件對(duì)話框按鈕控件,可用可用SendDlgItemMessage完成相同操作完成相同操作向控件子窗口向控件子窗口發(fā)出的消息發(fā)出的消息7按鈕控件按鈕控件示例示例【例【例7-1】創(chuàng)】創(chuàng)建如右上圖建如右上圖所示的按鈕所示的按鈕控件系列,控件系列,當(dāng)單擊每一當(dāng)單擊每一個(gè)按鈕后個(gè)按鈕后,就就出現(xiàn)如右下出現(xiàn)如右下圖所示的響圖所示的響應(yīng)。應(yīng)。8LRESULT CA
13、LLBACK WndProc(.)LRESULT CALLBACK WndProc(.) int X=50,Y=30; / int X=50,Y=30; /控件起始坐標(biāo)控件起始坐標(biāo) switch(message)switch(message) case WM_CREATE:case WM_CREATE: / /通過(guò)響應(yīng)通過(guò)響應(yīng)WM_CREATEWM_CREATE消息創(chuàng)建控件子窗口消息創(chuàng)建控件子窗口hwndPush = CreateWindow(lpszClassName1, /hwndPush = CreateWindow(lpszClassName1, /按鈕子窗口按鈕子窗口 這里是一個(gè)按鈕
14、,按我吧這里是一個(gè)按鈕,按我吧!, !, BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE, BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE, X,Y, X,Y, 240,25, 240,25, hwnd, hwnd, (HMENU)IDB_PUSHBUTTON, (HMENU)IDB_PUSHBUTTON, hInst, hInst, NULL); NULL); hwndDefPush = CreateWindow(lpszClassName1,/hwndDefPush = CreateWindow(lpszClassName1,/缺省按鈕子窗口缺省按鈕
15、子窗口 這是缺省按鈕,按下試試看這是缺省按鈕,按下試試看!, !, BS_DEFPUSHBUTTON|WS_CHILD|WS_VISIBLE, BS_DEFPUSHBUTTON|WS_CHILD|WS_VISIBLE, X, Y+30, X, Y+30, 240,25, 240,25, hwnd, hwnd, (HMENU)IDB_DEFPUSHBUTTON, (HMENU)IDB_DEFPUSHBUTTON, hInst, hInst, NULL) ; NULL) ; 9/創(chuàng)建自動(dòng)圓按鈕子窗口創(chuàng)建自動(dòng)圓按鈕子窗口hwndAutoRadio = CreateWindow(lpszClassNa
16、me1, hwndAutoRadio = CreateWindow(lpszClassName1, 自動(dòng)圓形按鈕,看看有何區(qū)別自動(dòng)圓形按鈕,看看有何區(qū)別?, ?, BS_AUTORADIOBUTTON|WS_CHILD|WS_VISIBLE, BS_AUTORADIOBUTTON|WS_CHILD|WS_VISIBLE, X, Y+90,X, Y+90,240,25, 240,25, hwnd, hwnd, (HMENU)IDB_AUTORADIOBUTTON, (HMENU)IDB_AUTORADIOBUTTON, hInst, hInst, NULL) ;NULL) ; hwndRadio
17、 = CreateWindow(lpszClassName1,/hwndRadio = CreateWindow(lpszClassName1,/圓按鈕控件子窗口圓按鈕控件子窗口 圓形按鈕,你喜歡嗎圓形按鈕,你喜歡嗎?, ?, BS_RADIOBUTTON|WS_CHILD|WS_VISIBLE, BS_RADIOBUTTON|WS_CHILD|WS_VISIBLE, X,Y+60, X,Y+60, 240,25, 240,25, hwnd, hwnd, (HMENU)IDB_RADIOBUTTON, (HMENU)IDB_RADIOBUTTON, hInst, hInst, NULL) ;
18、NULL) ; 10 /創(chuàng)建自動(dòng)復(fù)選框控件子窗口創(chuàng)建自動(dòng)復(fù)選框控件子窗口hwndAutoCheckBox = CreateWindow(lpszClassName1, hwndAutoCheckBox = CreateWindow(lpszClassName1, 自動(dòng)復(fù)選框,你會(huì)用嗎自動(dòng)復(fù)選框,你會(huì)用嗎?, ?, BS_AUTOCHECKBOX|WS_CHILD|WS_VISIBLE, BS_AUTOCHECKBOX|WS_CHILD|WS_VISIBLE, X, Y+150, X, Y+150, 240,25, 240,25, hwnd, hwnd, (HMENU)IDB_AUTOCHECK
19、BOX, (HMENU)IDB_AUTOCHECKBOX, hInst, hInst, NULL) ; NULL) ; /創(chuàng)建復(fù)選框控件子窗口創(chuàng)建復(fù)選框控件子窗口hwndCheckBox = CreateWindow(lpszClassName1, hwndCheckBox = CreateWindow(lpszClassName1, 復(fù)選框復(fù)選框 , , BS_CHECKBOX|WS_CHILD|WS_VISIBLE, BS_CHECKBOX|WS_CHILD|WS_VISIBLE, X,Y+120, X,Y+120, 240,25, 240,25, hwnd, hwnd, (HMENU)I
20、DB_CHECKBOX, (HMENU)IDB_CHECKBOX, hInst, hInst, NULL) ; NULL) ;11/處理控件消息處理控件消息case WM_COMMAND:case WM_COMMAND: switch(LOWORD(wParam)switch(LOWORD(wParam) case IDB_PUSHBUTTON: /case IDB_PUSHBUTTON: /當(dāng)用戶單擊按鈕時(shí),改變按鈕文本當(dāng)用戶單擊按鈕時(shí),改變按鈕文本 SetWindowText(hwndPush,SetWindowText(hwndPush,你已按下了按鈕你已按下了按鈕!); break;!
21、); break; case IDB_DEFPUSHBUTTON: /case IDB_DEFPUSHBUTTON: /當(dāng)用戶單擊按鈕時(shí),改變按鈕文本當(dāng)用戶單擊按鈕時(shí),改變按鈕文本 SetWindowText(hwndDefPush,SetWindowText(hwndDefPush,按鈕已被按下按鈕已被按下); break;); break; /創(chuàng)建組框控件子窗口創(chuàng)建組框控件子窗口hwndGroupBox = CreateWindow(lpszClassName1, hwndGroupBox = CreateWindow(lpszClassName1, 組框組框, , BS_GROUPBOX
22、|WS_CHILD|WS_VISIBLE, BS_GROUPBOX|WS_CHILD|WS_VISIBLE, X+290, Y+30, X+290, Y+30, 100,140, 100,140, hwnd, hwnd, (HMENU)IDB_GROUPBOX, (HMENU)IDB_GROUPBOX, hInst, hInst, NULL) ; NULL) ; break; break;12case IDB_RADIOBUTTON: /case IDB_RADIOBUTTON: /當(dāng)用戶單擊圓按鈕時(shí),設(shè)置按鈕為選中狀態(tài)當(dāng)用戶單擊圓按鈕時(shí),設(shè)置按鈕為選中狀態(tài) SendMessage(hwndR
23、adio,BM_SETCHECK,1,0); break;SendMessage(hwndRadio,BM_SETCHECK,1,0); break; case IDB_AUTORADIOBUTTON:case IDB_AUTORADIOBUTTON: break; break; case IDB_CHECKBOX: /case IDB_CHECKBOX: /根據(jù)復(fù)選框狀態(tài)設(shè)置復(fù)選框根據(jù)復(fù)選框狀態(tài)設(shè)置復(fù)選框 if(nCheckBoxSt=0)if(nCheckBoxSt=0) SendMessage(hwndCheckBox,BM_SETCHECK,1,0);nCheckBoxSt=1; Se
24、ndMessage(hwndCheckBox,BM_SETCHECK,1,0);nCheckBoxSt=1;else /else /如果當(dāng)前為非選中狀態(tài),則設(shè)置為選中狀態(tài)如果當(dāng)前為非選中狀態(tài),則設(shè)置為選中狀態(tài) SendMessage(hwndCheckBox,BM_SETCHECK,0,0);nCheckBoxSt=0;SendMessage(hwndCheckBox,BM_SETCHECK,0,0);nCheckBoxSt=0; break; break; case IDB_AUTOCHECKBOX: break; case IDB_AUTOCHECKBOX: break; case IDB
25、_GROUPBOX:case IDB_GROUPBOX:break;break; break; break; case WM_DESTROY: PostQuitMessage(0); break;case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam);default: return DefWindowProc(hwnd,message,wParam,lParam); return 0;return 0; 13 本程序運(yùn)行時(shí)將在主窗口用戶區(qū)的中央顯示
26、一個(gè)普通按鈕,上面本程序運(yùn)行時(shí)將在主窗口用戶區(qū)的中央顯示一個(gè)普通按鈕,上面寫(xiě)有寫(xiě)有“啟動(dòng)一個(gè)對(duì)話框啟動(dòng)一個(gè)對(duì)話框”,按下按鈕彈出一個(gè)對(duì)話框,按下按鈕彈出一個(gè)對(duì)話框,對(duì)話框含有三個(gè)對(duì)話框含有三個(gè)成組框,其中分別是圓按鈕、自動(dòng)圓按鈕和復(fù)選框,此外,還有一個(gè)成組框,其中分別是圓按鈕、自動(dòng)圓按鈕和復(fù)選框,此外,還有一個(gè)普通按鈕和一個(gè)缺省按鈕。普通按鈕和一個(gè)缺省按鈕。 14LRESULT CALLBACK WndProc(HWND hwnd, UINT message,WPARAM wParam,LPARAM lParam)LRESULT CALLBACK WndProc(HWND hwnd, UINT
27、 message,WPARAM wParam,LPARAM lParam) RECT rect; RECT rect; switch(message) switch(message) case WM_CREATE: case WM_CREATE: /通過(guò)響應(yīng)通過(guò)響應(yīng)WM_CREATEWM_CREATE消息創(chuàng)建控件子窗口消息創(chuàng)建控件子窗口 GetClientRect(hwnd,&rect); /GetClientRect(hwnd,&rect); /創(chuàng)建按鈕子窗口創(chuàng)建按鈕子窗口 hwndPush = CreateWindow(BUTTON, hwndPush = CreateWindow(BUT
28、TON, 啟動(dòng)一個(gè)對(duì)話框啟動(dòng)一個(gè)對(duì)話框, , BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE, BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE, (rect.right-rect.left)/2-60, (rect.right-rect.left)/2-60, (rect.bottom-rect.top)/2-15, (rect.bottom-rect.top)/2-15, 120,30,hwnd,(HMENU)IDB_PUSHBUTTON,hInst,NULL); 120,30,hwnd,(HMENU)IDB_PUSHBUTTON,hInst,NULL
29、); break; break; case WM_COMMAND: case WM_COMMAND: / /處理控件消息處理控件消息 if(LOWORD(wParam)=IDB_PUSHBUTTON)if(LOWORD(wParam)=IDB_PUSHBUTTON) DialogBox(hInst,Button,hwnd,DialogProc); DialogBox(hInst,Button,hwnd,DialogProc); EnableWindow(hwndPush,FALSE); EnableWindow(hwndPush,FALSE); SetWindowText(hwndPush,
30、SetWindowText(hwndPush,不能再使用不能再使用);); break; break; case WM_DESTROY: case WM_DESTROY: PostQuitMessage(0); break; PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); default: return DefWindowProc(hwnd,message,wParam,lParam); return 0; return 0; 15BOOL CALLBACK Dialog
31、Proc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam)BOOL CALLBACK DialogProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam) switch(message) switch(message) case WM_COMMAND: case WM_COMMAND: switch(LOWORD(wParam)switch(LOWORD(wParam) case IDOK:case IDOK: EndDialog(hdlg,0); return 1; EndDialo
32、g(hdlg,0); return 1; case IDCANCEL: EndDialog(hdlg,0); return 1;case IDCANCEL: EndDialog(hdlg,0); return 1; case IDC_RADIO1:case IDC_RADIO1: if(HIWORD(wParam)=BN_CLICKED) if(HIWORD(wParam)=BN_CLICKED) SendDlgItemMessage(hdlg,IDC_RADIO1,BM_SETCHECK,1,0); SendDlgItemMessage(hdlg,IDC_RADIO1,BM_SETCHECK
33、,1,0); SendDlgItemMessage(hdlg,IDC_RADIO2,BM_SETCHECK,0,0); SendDlgItemMessage(hdlg,IDC_RADIO2,BM_SETCHECK,0,0); return 1; return 1; break; break; case IDC_RADIO2: case IDC_RADIO2: if(HIWORD(wParam)=BN_CLICKED) if(HIWORD(wParam)=BN_CLICKED) SendDlgItemMessage(hdlg,IDC_RADIO1,BM_SETCHECK,0,0); SendDl
34、gItemMessage(hdlg,IDC_RADIO1,BM_SETCHECK,0,0); SendDlgItemMessage(hdlg,IDC_RADIO2,BM_SETCHECK,1,0); SendDlgItemMessage(hdlg,IDC_RADIO2,BM_SETCHECK,1,0); return 1; return 1; break; break; break; break; case WM_CLOSE: case WM_CLOSE:EndDialog(hdlg,0);EndDialog(hdlg,0);return 1;return 1; return 0; retur
35、n 0; 167.4.1 滾動(dòng)條控件的功能特點(diǎn)與分類(lèi)滾動(dòng)條控件的功能特點(diǎn)與分類(lèi) 滾動(dòng)條控件滾動(dòng)條控件最直接的功能是當(dāng)應(yīng)用程序顯示的內(nèi)容超最直接的功能是當(dāng)應(yīng)用程序顯示的內(nèi)容超過(guò)窗口的范圍時(shí),用戶可通過(guò)拖動(dòng)滾動(dòng)條遍歷整個(gè)窗口內(nèi)過(guò)窗口的范圍時(shí),用戶可通過(guò)拖動(dòng)滾動(dòng)條遍歷整個(gè)窗口內(nèi)容。滾動(dòng)條在功能上分為容。滾動(dòng)條在功能上分為垂直與水平滾動(dòng)條垂直與水平滾動(dòng)條,分別實(shí)現(xiàn)窗,分別實(shí)現(xiàn)窗口內(nèi)容縱向和橫向的滾動(dòng)。口內(nèi)容縱向和橫向的滾動(dòng)。7.4 滾動(dòng)條控件滾動(dòng)條控件177.4.2 滾動(dòng)條控件的創(chuàng)建滾動(dòng)條控件的創(chuàng)建三種三種方法方法創(chuàng)建窗口滾動(dòng)條創(chuàng)建窗口滾動(dòng)條創(chuàng)建滾動(dòng)條子窗口控件創(chuàng)建滾動(dòng)條子窗口控件創(chuàng)建對(duì)話框中的滾動(dòng)條
36、控件創(chuàng)建對(duì)話框中的滾動(dòng)條控件SB_BOTTOM到滾動(dòng)條最底端或最左端到滾動(dòng)條最底端或最左端SB_RIGHT滾動(dòng)到右邊滾動(dòng)到右邊SB_LEFT滾動(dòng)到左邊滾動(dòng)到左邊SB_PAGEUP向上滾動(dòng)一頁(yè)向上滾動(dòng)一頁(yè)SB_PAGEDOWN 向下滾動(dòng)一頁(yè)向下滾動(dòng)一頁(yè)樣式為樣式為WS_VSCROLL和和WS_HSCROLL的窗口的創(chuàng)建的窗口的創(chuàng)建hwnd=CreateWindowhwnd=CreateWindow(lpszClassName, lpszTitle,lpszClassName, lpszTitle, WS_OVERLAPPEDWINDOW | WS_OVERLAPPEDWINDOW | WS_VS
37、CROLL | WS_HSCROLL WS_VSCROLL | WS_HSCROLL, . hInstance, hInstance, NULL); NULL);調(diào)用調(diào)用CreateWindow創(chuàng)建子窗口滾動(dòng)條控件創(chuàng)建子窗口滾動(dòng)條控件CreateWindow(“SCROLLBAR”,/CreateWindow(“SCROLLBAR”,/預(yù)定義窗口類(lèi)名預(yù)定義窗口類(lèi)名 lpszScrollTitle, /lpszScrollTitle, /滾動(dòng)條標(biāo)題,常為滾動(dòng)條標(biāo)題,常為NULLNULL WS_CHILD | WS_VISIBLE WS_CHILD | WS_VISIBLE, /滾動(dòng)條樣式滾動(dòng)條樣
38、式 X,Y,X,Y,/滾動(dòng)條起始坐標(biāo)滾動(dòng)條起始坐標(biāo) nWidth,nHeight,/nWidth,nHeight,/滾動(dòng)框?qū)挾扰c高度滾動(dòng)框?qū)挾扰c高度 hwndParant,hwndParant,/擁有該滾動(dòng)條的窗口句柄擁有該滾動(dòng)條的窗口句柄 ID,ID,/滾動(dòng)條標(biāo)識(shí)滾動(dòng)條標(biāo)識(shí) hInstance,hInstance,/應(yīng)用程序當(dāng)前實(shí)例句柄應(yīng)用程序當(dāng)前實(shí)例句柄 NULLNULL 滾動(dòng)條樣式除窗口類(lèi)樣式外,滾動(dòng)條樣式除窗口類(lèi)樣式外,常用的還有常用的還有SBS_VERT和和SBS_HORZ滾動(dòng)條在對(duì)話框的定義中完成創(chuàng)建操作滾動(dòng)條在對(duì)話框的定義中完成創(chuàng)建操作SCROLLBAR IDSCROLLBAR
39、ID,X,Y,nWidth,nHeight,styleX,Y,nWidth,nHeight,style187.4.3 常用滾動(dòng)條操作函數(shù)常用滾動(dòng)條操作函數(shù)SetScrollRange:設(shè)置滾動(dòng)條的滾動(dòng)范圍:設(shè)置滾動(dòng)條的滾動(dòng)范圍 int SetScrollRange int SetScrollRange(HWND hwndHWND hwnd, int nBarint nBar,/滾動(dòng)條特性標(biāo)識(shí)滾動(dòng)條特性標(biāo)識(shí) int nMaxPosint nMaxPos,/滾動(dòng)條最大滾動(dòng)位置滾動(dòng)條最大滾動(dòng)位置 int nMinPosint nMinPos,/滾動(dòng)條最小滾動(dòng)位置滾動(dòng)條最小滾動(dòng)位置 BOOL bRed
40、raw)BOOL bRedraw)/當(dāng)滾動(dòng)條改變時(shí)是否重繪;非當(dāng)滾動(dòng)條改變時(shí)是否重繪;非0 0表示重繪表示重繪 SB_CTL 為控件滾動(dòng)條為控件滾動(dòng)條 SB_HORZ 為窗口水平滾動(dòng)條為窗口水平滾動(dòng)條 SB_VERT 為窗口垂直滾動(dòng)條為窗口垂直滾動(dòng)條SetScrollPos:設(shè)置滾動(dòng)塊的位置:設(shè)置滾動(dòng)塊的位置int SetScrollPosint SetScrollPos(HWND hwndHWND hwnd, int nBarint nBar, /滾動(dòng)條的特性標(biāo)識(shí),同滾動(dòng)條的特性標(biāo)識(shí),同SetScrollRangeSetScrollRange函數(shù)函數(shù) int nPosint nPos, /滾
41、動(dòng)塊的位置滾動(dòng)塊的位置 BOOL bRedrawBOOL bRedraw/意義同意義同SetScrollRangeSetScrollRange函數(shù)函數(shù))19GetSystemMetrics:獲取系統(tǒng)提供的滾動(dòng)條尺寸:獲取系統(tǒng)提供的滾動(dòng)條尺寸如:如:獲取系統(tǒng)水平滾動(dòng)條的高度獲取系統(tǒng)水平滾動(dòng)條的高度:GetSystemMetrics(SM_CYHSCROLL););GetScrollpos:獲取滾動(dòng)塊的位置:獲取滾動(dòng)塊的位置int GetScrollPosint GetScrollPos ( ( HWND hwnd,HWND hwnd, /窗口句柄,同窗口句柄,同SetScrollRangeSet
42、ScrollRange函數(shù)函數(shù) int nBarint nBar/滾動(dòng)條特性標(biāo)識(shí)滾動(dòng)條特性標(biāo)識(shí) ) );GetScrollRange:獲取滾動(dòng)條的滾動(dòng)范圍:獲取滾動(dòng)條的滾動(dòng)范圍BOOL GetScrollRange BOOL GetScrollRange ( (HWND hwnd,HWND hwnd,int nBar,int nBar,LPINT lpMinPos,LPINT lpMinPos,/接收最小位置的整形變量的地址接收最小位置的整形變量的地址LPINT lpMaxPos)LPINT lpMaxPos)/接收最大位置的整形變量的地址接收最大位置的整形變量的地址207.4.4 滾動(dòng)控件示
43、例滾動(dòng)控件示例【例【例8-2】本例要求創(chuàng)建一個(gè)帶滾動(dòng)條的顏色框,在顏色框中,通過(guò)拉動(dòng)】本例要求創(chuàng)建一個(gè)帶滾動(dòng)條的顏色框,在顏色框中,通過(guò)拉動(dòng)滾動(dòng)條,使其顯示的區(qū)域產(chǎn)生變化,同時(shí),可以通過(guò)顏色的設(shè)置,來(lái)改滾動(dòng)條,使其顯示的區(qū)域產(chǎn)生變化,同時(shí),可以通過(guò)顏色的設(shè)置,來(lái)改變顏色框的顏色變顏色框的顏色21LRESULT APIENTRY MainWndProc(.)LRESULT APIENTRY MainWndProc(.) HDC hDC; HDC hDC;HBRUSH hBrush;HBRUSH hBrush; static HWND hWndScrollBar; static SCROLLINF
44、O stScrollInfo; static HWND hWndScrollBar; static SCROLLINFO stScrollInfo; static int nRectWidth; static int nRectWidth; switch(message)switch(message) casecase WM_CREATE: WM_CREATE: hWndScrollBar = CreateWindowEx(0L,SCROLLBAR,(LPSTR)NULL, hWndScrollBar = CreateWindowEx(0L,SCROLLBAR,(LPSTR)NULL, WS_
45、CHILD | SBS_VERT, WS_CHILD | SBS_VERT, 10,30-GetSystemMetrics(SM_CYVSCROLL), 10,30-GetSystemMetrics(SM_CYVSCROLL), 19,100+2 19,100+2* *GetSystemMetrics(SM_CYVSCROLL),GetSystemMetrics(SM_CYVSCROLL), hWnd,(HMENU)NULL,hInst,(LPVOID)NULL); hWnd,(HMENU)NULL,hInst,(LPVOID)NULL);stScrollInfo.cbSize = sizeo
46、f(SCROLLINFO);stScrollInfo.cbSize = sizeof(SCROLLINFO);stScrollInfo.fMask = stScrollInfo.fMask = SIF_POSSIF_POS | | SIF_RANGESIF_RANGE | | SIF_PAGESIF_PAGE; ;stScrollInfo.nMin = 1;stScrollInfo.nMin = 1;stScrollInfo.nMax = 100stScrollInfo.nMax = 100; ;stScrollInfo.nPos = 1;stScrollInfo.nPos = 1;stScr
47、ollInfo.nPage = 10;stScrollInfo.nPage = 10;/ / 設(shè)置滾動(dòng)條控件的各方面的特性參數(shù)。設(shè)置滾動(dòng)條控件的各方面的特性參數(shù)。SetScrollInfo(hWndScrollBar,SetScrollInfo(hWndScrollBar,SB_CTLSB_CTL,&stScrollInfo,FALSE);,&stScrollInfo,FALSE);ShowWindow(hWndScrollBar,TRUE);ShowWindow(hWndScrollBar,TRUE);nRectWidth = 100;nRectWidth = 100;break; brea
48、k; 制作垂直制作垂直滾動(dòng)條滾動(dòng)條滾動(dòng)條結(jié)構(gòu)設(shè)置為滾動(dòng)條控件221. case1. case WM_VSCROLL: WM_VSCROLL:2. if (HWND)lParam!=hWndScrollBar) break;2. if (HWND)lParam!=hWndScrollBar) break;3. switch(LOWORD(wParam)3. switch(LOWORD(wParam)4.4. case SB_LINEUP: case SB_LINEUP: nRectWidth+=1; nRectWidth+=1; break;break;5.5. case SB_LINEDOWN
49、:case SB_LINEDOWN:nRectWidth-=1;nRectWidth-=1;break;break;6.6. case SB_PAGEUP:case SB_PAGEUP:nRectWidth+=10;nRectWidth+=10;break;break;7.7. case SB_PAGEDOWN:case SB_PAGEDOWN:nRectWidth-=10;nRectWidth-=10;break;break;8. case SB_THUMBPOSITION:nRectWidth=101-HIWORD(wParam);break;8. case SB_THUMBPOSITIO
50、N:nRectWidth=101-HIWORD(wParam);break;9. default:return(DefWindowProc(hWnd,message,wParam,lParam);9. default:return(DefWindowProc(hWnd,message,wParam,lParam); 10. 10. if(nRectWidth1) if(nRectWidth100)11. else if (nRectWidth100)nRectWidth = 100;nRectWidth = 100;12. 12. stScrollInfo.fMask = SIF_POS;st
51、ScrollInfo.fMask = SIF_POS;13. 13. stScrollInfo.nPos = 101-nRectWidth;stScrollInfo.nPos = 101-nRectWidth;14. 14. SetScrollInfo(hWndScrollBar,SB_CTL,&stScrollInfo,TRUE);SetScrollInfo(hWndScrollBar,SB_CTL,&stScrollInfo,TRUE);15. 15. SendMessage(hWndMain,WM_COMMAND,IDM_DRAW,0L);SendMessage(hWndMain,WM_
52、COMMAND,IDM_DRAW,0L);16. 16. break;break;231. case1. case WM_COMMAND: WM_COMMAND:2.2. switchswitch(LOWORD(wParam)(LOWORD(wParam)3. 3. casecase IDM_RGB: IDM_RGB:4. DialogBox(hInst,RGBDlg,hWnd,(DLGPROC)RGBDlgProc); break;4. DialogBox(hInst,RGBDlg,hWnd,(DLGPROC)RGBDlgProc); break;5. case5. case IDM_DRA
53、W: IDM_DRAW:6. hDC = GetDC(hWnd);6. hDC = GetDC(hWnd);7. 7. hBrush = CreateSolidBrush(RGB(255,255,255); hBrush = CreateSolidBrush(RGB(255,255,255);8. 8. SelectObject(hDC,hBrush); SelectObject(hDC,hBrush);9. 9. Rectangle(hDC,30,30,130,130); Rectangle(hDC,30,30,130,130);10. 10. hBrush=CreateSolidBrush
54、(RGB(crRGB0,crRGB1,crRGB2); hBrush=CreateSolidBrush(RGB(crRGB0,crRGB1,crRGB2);11. 11. SelectObject(hDC,hBrush); SelectObject(hDC,hBrush);12. 12. Rectangle(hDC,30,130-nRectWidth,30+nRectWidth,130); Rectangle(hDC,30,130-nRectWidth,30+nRectWidth,130);13. 13. ReleaseDC(hWnd,hDC); ReleaseDC(hWnd,hDC);14.
55、 14. break; break;15. case15. case IDM_EXIT: IDM_EXIT:16. 16. PostQuitMessage(0); PostQuitMessage(0);break;break;17. case17. case IDM_ABOUT: IDM_ABOUT:18. 18. DialogBox(hInst,AboutBox,hWnd,(DLGPROC)About); DialogBox(hInst,AboutBox,hWnd,(DLGPROC)About);break;break;19. default:19. default:20. 20. retu
56、 returnrn(DefWindowProc(hWnd,message,wParam,lParam);(DefWindowProc(hWnd,message,wParam,lParam);21. 21. 22. break;22. break;23. case23. case WM_DESTROY: PostQuitMessage(0); WM_DESTROY: PostQuitMessage(0);break;break;24. default:24. default:return(DefWindowProc(hWnd,message,wParam,lParam);return(DefWi
57、ndowProc(hWnd,message,wParam,lParam);25. 25. 26. return(0);26. return(0);27.27.241. BOOL APIENTRY RGBDlgProc(.)1. BOOL APIENTRY RGBDlgProc(.)2. 2. 3. static int CurrentVal3,PrevVal3;3. static int CurrentVal3,PrevVal3;4. static HWND hwScroll3;4. static HWND hwScroll3;5. char szString10;5. char szStri
58、ng10;6. int i;6. int i;7. switch(message)7. switch(message)8. 8. 9. case WM_INITDIALOG: 9. case WM_INITDIALOG: / / 分別設(shè)置滾動(dòng)條的范圍和初始位置。分別設(shè)置滾動(dòng)條的范圍和初始位置。10. for(i=0;i3;i+)10. for(i=0;i255) CurrentVali=255;8. if(CurrentVali255) CurrentVali=255;9. break;9. break;10. case10. case SB_LINEUP: SB_LINEUP:11. Cur
59、rentVali-;11. CurrentVali-;12. if(CurrentVali0) 12. if(CurrentVali0) CurrentVali=0; CurrentVali=0;13. break;13. break; case case SB_PAGEDOWN: CurrentVali+=(255-CurrentVali)/2; SB_PAGEDOWN: CurrentVali+=(255-CurrentVali)/2;15. 15. break;break;16. case16. case SB_PAGEUP: SB_PAGEUP: CurrentVali-=Curren
60、tVali/2;CurrentVali-=CurrentVali/2;break;break;17. case17. case SB_THUMBTRACK: SB_THUMBTRACK: CurrentVali=HIWORD(wParam); CurrentVali=HIWORD(wParam); break;break;18. case18. case SB_TOP: SB_TOP: CurrentVali=0;CurrentVali=0; break;break;19. case19. case SB_BOTTOM: SB_BOTTOM: CurrentVali=255;CurrentVa
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度個(gè)人承包戶外廣告牌安裝合同范本3篇
- 二零二五年度房產(chǎn)更名買(mǎi)賣(mài)合同綠色環(huán)保生活3篇
- 二零二五年度教育培訓(xùn)機(jī)構(gòu)委托合作合同3篇
- 二零二五年度城市更新項(xiàng)目安置房買(mǎi)賣(mài)合同2篇
- 二零二五年度化妝品廣告創(chuàng)意制作與品牌合作合同3篇
- 海南職業(yè)技術(shù)學(xué)院《中文信息處理技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 海南外國(guó)語(yǔ)職業(yè)學(xué)院《地質(zhì)微生物學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度建筑工程二次結(jié)構(gòu)承包與建筑廢棄物資源化利用、處理與回收合同3篇
- 2025年度建筑裝修用涂料采購(gòu)及施工一體化合同2篇
- 課程設(shè)計(jì)技術(shù)特性表
- 2024年杭州市中醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 經(jīng)濟(jì)職業(yè)技術(shù)學(xué)院教務(wù)教學(xué)管理制度匯編(2024年)
- 2024-2025學(xué)年人教版八年級(jí)數(shù)學(xué)上冊(cè)期末測(cè)試模擬試題(含答案)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專(zhuān)業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之15:“6策劃-6.4創(chuàng)新組合”(雷澤佳編制-2025B0)
- 2025混凝土外加劑買(mǎi)賣(mài)合同
- 《環(huán)境感知技術(shù)》2024年課程標(biāo)準(zhǔn)(含課程思政設(shè)計(jì))
- 小學(xué)生科普人工智能
- 常用函數(shù)圖像(1)
- 說(shuō)明書(shū)ZWY-150(120)-45L煤礦用挖掘式裝載機(jī)
- 《鍋爐及鍋爐房設(shè)備》課程設(shè)計(jì)北京市某燃煤廠區(qū)蒸汽鍋爐房設(shè)計(jì)
- 單位局域網(wǎng)的建設(shè)—畢業(yè)論文
評(píng)論
0/150
提交評(píng)論