Lập trình windows với MFC Micrisoft visual C++6.0- P6
lượt xem 30
download
Trong windows, các nút chọn có thể hoạt động độc lập hay theo nhóm. CButton( ); Tạo lập đối tượng nút chọn rỗng. BOOL Create ( LPCTSTR lpszCaption, // Nội dung thông báo // Thông số dạng nút (BS_PUSHBUTTON) DWORD dwStyle, const RECT& rect, // Tọa độ, kích thước nút chọn // Con trỏ cửa sổ cha CWnd* pParentWnd, UINT nID // Số hiệu nút chọn ); Khởi tạo thông số cho đối tượng nút chọn. HBITMAP GetBitmap( ) const ;
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Lập trình windows với MFC Micrisoft visual C++6.0- P6
- Thöïc haønh 1: Vieát öùng duïng nhö VD19. Boå sung nuùt choïn "Nhap xong", m_editName.Create( WS_CHILD | WS_VISIBLE | WS_BORDER, maø khi choïn, seõ duøng hoäp thoâng baùo ñeå hieån thò noäi dung vöøa nhaäp. CRect( 135, 75, 280, 95 ), this, IDC_YOURNAME ); Taïo döï aùn VD21 nhö VD19. Chænh söûa cho CEmpWnd nhö sau: return 0; } Boå sung haønh vi xöû lyù: afx_msg void OnClickNhapxong() Trong baûng MessageMap, boå sung muïc xöû lyù message: void CEmpWnd::OnClickNhapxong () { BEGIN_MESSAGE_MAP(CEmpWnd, CWnd) CString yourname; //{{AFX_MSG_MAP(CEmpWnd) m_editName.GetWindowText( yourname ); ON_WM_CREATE() Muïc boå sung MessageBox ( yourname, "Hello !", ON_WM_DESTROY() MB_OK | MB_ICONEXCLAMATION ); ON_WM_PAINT() } //}}AFX_MSG_MAP ON_EN_CHANGE( IDC_YOURNAME, OnYourNameChange ) Khai baùo ID resource: IDC_NHAPXONG, boå sung ñoái töôïng thuoäc tính END_MESSAGE_MAP() protected m_buttonNhapxong kieåu CButton. Trong OnCreate: 8.3 CButton: int CEmpWnd::OnCreate( LPCREATESTRUCT lpCreateStruct ) CButton laø lôùp ñoái töôïng quaûn lyù nuùt choïn treân cöûa soå giao dieän. Trong { windows, caùc nuùt choïn coù theå hoaït ñoäng ñoäc laäp hay theo nhoùm. if (CWnd::OnCreate(lpCreateStruct) == -1) CButton( ); Taïo laäp ñoái töôïng nuùt choïn roãng. return -1; BOOL Create ( m_staticName.Create( _T("Enter your name:"), WS_CHILD | WS_VISIBLE, LPCTSTR lpszCaption, // Noäi dung thoâng baùo CRect(10, 75, 130, 95), this ); DWORD dwStyle, // Thoâng soá daïng nuùt (BS_PUSHBUTTON) m_editName.Create( WS_CHILD | WS_VISIBLE | WS_BORDER, const RECT& rect, // Toïa ñoä, kích thöôùc nuùt choïn CRect( 135, 75, 280, 95 ), this, -1 ); CWnd* pParentWnd, // Con troû cöûa soå cha m_buttonNhapxong.Create ( UINT nID // Soá hieäu nuùt choïn _T("Nhap xong"), WS_CHILD | WS_VISIBLE, ); Khôûi taïo thoâng soá cho ñoái töôïng nuùt choïn. CRect(10, 115, 90, 140), this, IDC_NHAPXONG ); HBITMAP GetBitmap( ) const ; Handle cuûa aûnh bitmap ñang duøng. return 0; HBITMAP SetBitmap(HBITMAP hBitmap); Gaén aûnh bitmap vaøo nuùt. } HICON GetIcon( ) const; Handle cuûa icon ñang duøng. Trong baûng MessageMap cuûa CEmpWnd, boå sung muïc xöû lyù message: HICON SetIcon( HICON hIcon ); Gaén icon vaøo nuùt. virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); ON_BN_CLICKED ( IDC_NHAPXONG , OnClickNhapxong ) Haønh vi keá thöøa ñeå thöïc hieän trang trí rieâng treân nuùt choïn. 8.4 CListBox: Nuùt choïn vaø cöûa soå cha: Nuùt choïn coù theå göûi message ñeán cöûa soå cha. CListbox laø lôùp ñoái töôïng quaûn lyù hoäp nhaäp chöùa danh saùch caùc muïc choïn Muïc ON_Notification maø cöûa soå cha duøng xöû lyù message töø nuùt choïn laø: treân cöûa soå giao dieän. Tuøy theo loaïi listbox maø khi söû duïng, ngöôøi duøng ñöôïc Muïc xöû lyù message YÙ nghóa cuûa message ñöôïc xöû lyù pheùp ñaùnh daáu choïn moät hoaëc nhieàu muïc ñoàng thôøi trong listbox. ON_BN_CLICKED Ngöôøi duøng click treân nuùt. CListBox( ); Taïo laäp ñoái töôïng roãng. ON_BN_DOUBLECLICKED Ngöôøi duøng double-click treân nuùt Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Caùc lôùp ñoái töôïng nhaäp lieäu 84 85
- BOOL Create ( virtual void DrawItem ( DWORD dwStyle, LPDRAWITEMSTRUCT lpDrawItemStruct // Thoâng soá aán ñònh daïng listbox const RECT& rect, // Toïa ñoä, kích thöôùc cuûa listbox ); Haønh vi keá thöøa nhaèm thöïc hieän trang trí caùc muïc theo caùch rieâng. CWnd* pParentWnd, // Con troû ñoái töôïng cöûa soå cha virtual void MeasureItem ( UINT nID LPMEASUREITEMSTRUCT lpMeasureItemStruct // Soá hieäu cuûa listbox ); Khôûi taïo thoâng soá cho ñoái töôïng ListBox. ); Laáy thoâng tin laøm cô sôû cho vieäc töï trang trí caùc muïc trong listbox. dwStyle: Goàm thoâng soá qui ñònh ñoái vôùi control vaø caùc daïng boå sung: virtual void DeleteItem ( LPDELETEITEMSTRUCT lpDeleteItemStruct LBS_MULTIPLESEL : Cho pheùp choïn nhieàu muïc ñoàng thôøi LBS_NOTIFY : Thoâng tin cho cöûa soå cha ); Haønh vi keá thöøa ñeå tuøy nghi xöû lyù khi moät muïc bò xoùa khoûi listbox. LBS_SORT : Caùc muïc ñöôïc xeáp thöù töï virtual int VKeyToItem ( UINT nKey, LBS_MULTICOLUMN : Coù nhieàu coät chöùa caùc muïc // Maõ phím (virtual key) ñöôïc goõ UINT nIndex LBS_STANDARD : = LBS_NOTIFY | LBS_SORT // Chæ soá muïc hieän haønh trong listbox int GetCount( ); Traû veà soá muïc choïn trong Listbox. ); Haønh vi keá thöøa cho pheùp tuøy nghi xöû lyù treân phím. int GetCurSel( ); Traû veà chæ soá cuûa muïc ñöôïc choïn (single). virtual int CharToItem ( UINT nKey, int SetCurSel ( // Maõ phím (character) ñöôïc goõ int nSelect UINT nIndex // Chæ soá muïc ñöôïc choïn // Chæ soá muïc hieän haønh trong listbox ); AÁn ñònh muïc choïn trong listbox. ); Haønh vi keá thöøa cho pheùp tuøy nghi xöû lyù phím kyù töï. int GetSelCount( ); Traû veà soá muïc ñöôïc choïn trong moät listbox. Chæ ListbBox vaø cöûa soå cha: ListBox vôùi thoâng soá daïng LBS_NOTIFY coù theå duøng cho listbox cho pheùp choïn nhieàu muïc. göûi message ñeán cöûa soå cha ñeå thoâng baùo tình traïng hoaït ñoäng cuûa noù. int GetSelItems ( Muïc ON_Notification maø cöûa soå cha duøng xöû lyù message töø listbox laø: int nMaxItems, // Soá muïc ñöôïc choïn vaø Muïc xöû lyù message YÙ nghóa cuûa message ñöôïc xöû lyù LPINT rgIndex // maûng chöùa caùc chæ soá cuûa chuùng ON_LBN_DBLCLK Ngöôøi duøng double-click treân listbox. ); Laáy chæ soá cuûa caùc muïc ñöôïc choïn trong listbox. ON_LBN_KILLFOCUS Keát thuùc hoaït ñoäng nhaäp. int AddString ( ON_LBN_SELCANCEL Huûy boû thao taùc choïn. LPCTSTR lpszItem // Thoâng baùo cuûa muïc ON_LBN_SELCHANGE Thay ñoåi muïc choïn trong listbox. ); Theâm moät muïc vaøo listbox. Neáu listbox khoâng coù ñaëc tính xeáp thöù töï ON_LBN_SETFOCUS Baét ñaàu nhaäp lieäu treân listbox. thì muïc môùi theâm ñöôïc ñaët vaøo cuoái danh saùch caùc muïc. ON_WM_CHARTOITEM Duøng cho ownerDraw listbox. int DeleteString ( UINT nIndex // Chæ soá cuûa muïc bò xoùa ON_WM_VKEYTOITEM Xöû lyù WM_KEYDOWN ); Xoùa moät muïc trong listbox. Thöïc haønh: Vieát öùng duïng töông töï VD21, theâm listbox coù ba muïc choïn: int InsertString ( "Ong A", "Ba B" vaø "Co C". Khi ngöôøi duøng click choïn moät muïc trong int nIndex, // Vò trí cheøn, -1 laø vò trí cuoái listbox listbox thì noäi dung cuûa muïc aáy ñöôïc ñieàn vaøo hoäp nhaäp Name. LPCTSTR lpszItem // Thoâng baùo cuûa muïc HD: Duøng ON_LBN_SELCHANGE ñònh höôùng xöû lyù message lieân quan. ); Cheøn moät muïc vaøo listbox taïi vò trí xaùc ñònh. Taïo öùng duïng VD22 nhö VD21. Chænh söûa lôùp CEmpWnd nhö sau: void ResetContent( ); Xoùa taát caû caùc muïc hieän coù trong listbox, laøm Boå sung haønh vi protected: afx_msg void OnSelectDanhsach() roãng noäi dung listbox quaûn lyù bôûi ñoái töôïng. void CEmpWnd::OnSelectDanhsach() Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Caùc lôùp ñoái töôïng nhaäp lieäu 86 87
- BOOL Create ( { DWORD dwStyle, // Chöùa thoâng soá veà daïng cuûa comboBox CString info; const RECT& rect, // Toïa ñoä, kích thöôùc comboBox int iSel = m_listboxDanhsach.GetCurSel(); // Khoâng coù löïa choïn CWnd* pParentWnd, // Con troû ñoái töôïng cöûa soå cha if (iSel == LB_ERR) // Xem nhö choïn muïc ñaàu tieân UINT nID // Soá hieäu comboBox iSel = 0; m_listboxDanhsach.GetText( iSel, info ); ); Khôûi taïo thoâng soá cho ñoái töôïng comboBox. m_editName.SetWindowText( info ); dwStyle: Goàm thoâng soá qui ñònh ñoái vôùi control vaø caùc daïng boå sung: } CBS_DROPDOWNLIST : Drop-list comboBox. Khai baùo ID resource: IDC_DANHSACH, thuoäc tính protected CBS_SIMPLE : Simple comboBox. m_listboxDanhsach kieåu CLisBox quaûn lyù listbox. CBS_DROPDOWN : Drop-Down comboBox. Haønh vi OnCreate thöïc hieän caùc khôûi taïo caàn thieát cho listbox. CBS_SORT : Danh saùch caùc muïc xeáp thöù töï. int GetCount( ); Traû veà soá muïc choïn trong comboBox. int CEmpWnd::OnCreate( LPCREATESTRUCT lpCreateStruct ) int GetCurSel( ); Traû veà chæ soá muïc ñöôïc choïn trong comboBox. { int SetCurSel( int nSelect ); AÁn ñònh muïc choïn trong comboBox. if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; void GetLBText ( // Thöïc hieän töông töï döï aùn VD21, ... int nIndex, // Chæ soá muïc trong comboBox // Vaø boå sung caùc noäi dung sau: CString& rString // Bieán chöùa keát quaû m_listboxDanhsach.Create ( ); Laáy noäi dung thoâng baùo cuûa moät muïc trong comboBox. WS_CHILD | WS_VISIBLE | WS_BORDER | void ShowDropDown ( LBS_NOTIFY | WS_VSCROLL, BOOL bShowIt = TRUE // TRUE = hieån thò ; FALSE = daáu CRect( 195, 7, 280, 65 ), this, IDC_DANHSACH ); ); Hieån thò hoaëc danh saùch chöùa caùc muïc hoã trôï trong comboBox. m_listboxDanhsach.AddString( "Ong A" ); int AddString(LPCTSTR lpszString ); Nhö listbox. m_listboxDanhsach.AddString( "Ba B" ); m_listboxDanhsach.AddString( "Co C" ); int DeleteString( UINT nIndex ); Nhö listbox. return 0; int InsertString( int nIndex , LPCTSTR lpszString ); Nhö listbox. } void ResetContent( ); Nhö listbox. Trong MessageMap cuûa CEmpWnd, boå sung muïc xöû lyù message: virtual void DrawItem ( LPDRAWITEMSTRUCT lpDrawItemStruct ON_LBN_SELCHANGE( IDC_DANHSACH, OnSelectDanhsach ) ); Nhö listbox. virtual void MeasureItem ( 8.5 CComboBox: LPMEASUREITEMSTRUCT lpMeasureItemStruct CComboBox laø lôùp ñoái töôïng quaûn lyù hoäp nhaäp vaø phaàn hoã trôï nhaäp vôùi ); Nhö listbox. danh saùch caùc muïc thoâng tin cho tröôùc. Caùch keát hôïp giöõa hoäp nhaäp vaø danh virtual void DeleteItem ( saùch hoã trôï taïo thaønh caùc daïng khaùc nhau cuûa comboBox: LPDELETEITEMSTRUCT lpDeleteItemStruct - Drop-list : Giaù trò nhaäp chæ ñöôïc choïn töø danh saùch. ); Nhö listbox. - Simple : Nhö Drop-list maø danh saùch hieån thò thöôøng tröïc. - Drop-down : Nhö Drop-list vaø coù theå nhaäp noäi dung môùi. CComboBox( ); Taïo laäp ñoái töôïng roãng. Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Caùc lôùp ñoái töôïng nhaäp lieäu 88 89
- ComboBox vaø cöûa soå cha: Ñoái töôïng comboBox coù theå göûi message ñeán // Nhö VD22, boå sung caùc noäi dung sau: ... cöûa soå cha ñeå thoâng baùo tình hình hoaït ñoäng cuûa noù. Muïc xöû lyù message m_Combobox.Create ( ON_Notification maø cöûa soå cha duøng xöû lyù message töø comboBox laø: WS_CHILD | WS_VISIBLE | WS_BORDER | CBS_DROPDOWNLIST, Muïc xöû lyù message YÙ nghóa cuûa message ñöôïc xöû lyù CRect( 135, 100, 280, 225 ), this, ON_CBN_CLOSEUP Danh saùch vöøa ñöôïc ñoùng laïi IDC_COMBOBOX ); ON_CBN_DBLCLK Double-click treân muïc choïn m_Combobox.AddString( "Vo van A" ); ON_CBN_DROPDOWN Danh saùch vöøa ñöôïc môû ra m_Combobox.AddString( "Nguyen thi B" ); m_Combobox.AddString( "Tran thi C" ); ON_CBN_EDITCHANGE Noäi dung hoäp nhaäp ñang thay ñoåi return 0; ON_CBN_EDITUPDATE Saép caäp nhaät noäi dung hoäp nhaäp } ON_CBN_SELENDCANCEL Boû qua vieäc thay ñoåi muïc choïn. Trong MessageMap cuûa CEmpWnd, khai baùo muïc xöû lyù message: ON_CBN_SELENDOK Moät muïc trong danh saùch ñöôïc choïn ON_CBN_KILLFOCUS Keát thuùc nhaäp lieäu trong comboBox ON_CBN_SELCHANGE( IDC_COMBOBOX,OnSelectCombobox ) ON_CBN_SELCHANGE Thay ñoåi muïc choïn trong danh saùch ON_CBN_SETFOCUS Baét ñaàu nhaäp lieäu trong comboBox 8.6 CSpinButtonCtrl: CSpinButtonCTrl laø lôùp ñoái töôïng quaûn lyù nuùt taêng-giaûm treân cöûa soå giao Thöïc haønh: Vieát öùng duïng töông töï VD22, Boå sung combobox kieåu dieän. Nuùt taêng-giaûm ñöôïc duøng hoã trôï cho caùc hoäp nhaäp soá nguyeân. dropdown coù ba muïc choïn: "Vo van A", "Nguyen thi B" vaø "Tran thi C". CSpinButtonCtrl( ); Taïo laäp ñoái töôïng roãng. Khi choïn treân combobox, noäi dung choïn ñöôïc ñieàn vaøo hoäp nhaäp Name. BOOL Create ( HD: Duøng ON_CBN_SELCHANGE ñònh höôùng xöû lyù message lieân quan. DWORD dwStyle, // Chöùa thoâng soá daïng nuùt taêng giaûm Taïo döï aùn VD23 töông töï VD22. Chænh söûa lôùp CEmpWnd nhö sau: const RECT& rect, // Toïa ñoä, kích thöôùc. Khoâng baét buoäc. Boå sung haønh vi protected: afx_msg void OnSelectCombobox () CWnd* pParentWnd, // Con troû ñoái töôïng cöûa soå cha void CEmpWnd::OnSelectCombobox() UINT nID // Soá hieäu nuùt taêng giaûm { ); Khôûi taïo thoâng soá cho ñoái töôïng nuùt taêng giaûm. CString info; dwStyle: Goàm thoâng soá qui ñònh ñoái vôùi control vaø caùc daïng boå sung: int iSel = m_Combobox.GetCurSel( ); UDS_HORZ : Hai nuùt taêng-giaûm naèm ngang if (iSel == LB_ERR) // no selection UDS_SETBUDDYINT : Duøng cho hoäp nhaäp soá nguyeân. iSel = 0; UDS_ALIGNRIGHT : Naèm beân phaûi hoäp nhaäp. m_Combobox.GetLBText( iSel, info ); UDS_ALIGNLEFT : Naèm beân traùi hoäp nhaäp. m_editName.SetWindowText( info ); UDS_ARROWKEYS : Duøng caùc phím ↑, ↓ ñeå taêng-giaûm. } CWnd* SetBuddy ( Khai baùo ID resource: IDC_COMBOBOX. Khai baùo ñoái töôïng thuoäc CWnd* pWndBuddy // Con troû ñoái töôïng ñöôïc hoã trôï. tính protected m_Combobox kieåu CComboBox quaûn lyù comboBox. ); AÁn ñònh ñoái töôïng hoäp nhaäp maø nuùt taêng-giaûm naøy seõ hoã trôï. Haønh vi Haønh vi OnCreate thöïc hieän caùc khôûi taïo caàn thieát cho comboBox: traû veà con troû ñoái töôïng hoäp nhaäp ñöôïc hoã trôï tröôùc ñoù. int CEmpWnd::OnCreate (LPCREATESTRUCT lpCreateStruct) CWnd* GetBuddy( ); Traû veà con troû ñoái töôïng hoäp nhaäp ñöôïc hoã trôï. { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Caùc lôùp ñoái töôïng nhaäp lieäu 90 91
- Haønh vi OnClickNhapxong thöïc hieän hieån thò thoâng tin nhaäp: void SetRange ( int nLower, // Giaù trò caän döôùi void CEmpWnd::OnClickNhapxong( ) int nUpper // Giaù trò caän treân. { ); AÁn ñònh giôùi haïn bieán thieân cuûa nuùt taêng-giaûm. CString yourname, yourage, mess; void GetRange ( m_editName.GetWindowText( yourname ); int &lower, // Tham bieán chöùa giaù trò caän döôùi m_editAge.GetWindowText( yourage ); int& upper // Tham bieán chöùa giaù trò caän treân mess.Format ( "%s\n is %s years old", yourname, yourage ); MessageBox( mess,"Hello!", MB_OK | MB_ICONEXCLAMATION ); ); Laáy thoâng tin veà giôùi haïn cuûa nuùt taêng-giaûm. } int SetPos( int nPos ); Ñaët giaù trò cho nuùt taêng-giaûm. int GetPos( ); Traû veàgiaù trò hieän taïi cuûa nuùt taêng-giaûm. 8.7 CProgressCtrl: CProgressCtrl laø lôùp ñoái töôïng quaûn lyù thanh tieán ñoä xöû lyù treân giao dieän. Thöïc haønh: Vieát öùng duïng töông töï VD21; muïc thoâng baùo "Enter your CProgressCtrl( ); Taïo laäp ñoái töôïng roãng. age:" vaø hoäp nhaäp tuoåi. Hoäp nhaäp ñöôïc hoã trôï cuûa nuùt spin coù giôùi haïn 15- BOOL Create ( 250. Nuùt choïn "Nhap xong" cho pheùp hieån thò teân vaø tuoåi vöøa nhaäp. DWORD dwStyle, // Thoâng soá daïng thanh tieán ñoä xöû lyù Taïo döï aùn VD24 töông töï VD21. Chænh söûa lôùp CEmpWnd nhö sau: const RECT& rect, // Toaï ñoä, kích thöôùc cuûa thanh Khai baùo thuoäc tính m_editAge kieåu CEdit quaûn lyù hoäp nhaäp. CWnd* pParentWnd, // Con troû ñoái töôïng cöûa soå cha Haønh vi OnCreate thöïc hieän khôûi taïo thoâng soá cho caùc muïc. Rieâng muïc UINT nID // Soá hieäu cuûa thanh tieán ñoä thoâng baùo vaø nuùt spin, do khoâng coù yeâu caàu truy xuaát neân caùc ñoái töôïng ); Haønh vi khôûi taïo thoâng soá cho thanh tieán ñoä treân giao dieän. quaûn lyù chuùng seõ ñöôïc khai baùo static trong OnCreate: dwStyle: Goàm thoâng soá qui ñònh ñoái vôùi control vaø caùc daïng boå sung: PBS_VERTICAL : Thanh tieán ñoä naèm thaúng ñöùng. int CEmpWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { PBS_SMOOTH : Chæ muïc tieán ñoä laø daõi maøu (xanh) lieân tuïc. if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; void SetRange ( // Töông töï VD21, vaø caùc noäi dung boå sung sau: ... short nLower, // Giaù trò nhoû nhaát m_editAge.Create ( short nUpper // Giaù trò lôùn nhaát WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER, ); AÁn ñònh giôùi haïn tieán ñoä xöû lyù chæ bôûi thanh tieán ñoä. CRect( 135, 45, 190, 65 ), this, -1 ); void GetRange( static CStatic m_staticAge; int& nLower, // Bieán chöùa giaù trò nhoû nhaát static CSpinButtonCtrl m_spinAge; int& nUpper // Bieán chöùa giaù trò lôùn nhaát m_staticAge.Create ( _T( "Enter your age:" ), ); Laáy thoâng tin veà giôùi haïn tieán ñoä xöû lyù chæ bôûi thanh tieán ñoä. WS_CHILD | WS_VISIBLE, int SetPos( int nPos ); AÁn ñònh vò trí hieän taïi cuûa thanh tieán ñoä. CRect( 10, 45, 130, 65 ), this ); int GetPos( ); Traû veà vò trí hieän taïi cuûa thanh tieán ñoä xöû lyù. m_spinAge.Create ( WS_CHILD | WS_VISIBLE | int OffsetPos( int nPos ); AÁn ñònh möùc taêng (giaûm) treân moät ñôn vò cuûa UDS_ARROWKEYS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT, CRect(0,0,1,1), this, -1 ); chæ muïc tieán ñoä trong thanh tieán ñoä baèng nPos, ñoàng thôøi caäp nhaät traïng m_spinAge.SetBase( 1 ); m_spinAge.SetRange( 15, 250 ); thaùi hieån thò cuûa thanh tieán ñoä theo giaù trò aán ñònh môùi. m_spinAge.SetBuddy ( &m_editAge ); int StepIt( ); Thay ñoåi chæ muïc tieán ñoä moät ñôn vò. return 0; } Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Caùc lôùp ñoái töôïng nhaäp lieäu 92 93
- Khai baùo caùc thuoäc tính protected: m_staticScroll kieåu CStatic quaûn lyù 8.8 CScrollBar: muïc thoâng baùo, m_Scroll kieåu CScrollBar quaûn lyù thanh cuoän. CScrollBar laø lôùp ñoái töôïng quaûn lyù thanh cuoän treân cöûa soå giao dieän. CScrollBar( ); Taïo laäp ñoái töôïng roãng. Haønh vi OnCreate thöïc hieän khôûi taïo thoâng soá cho caùc muïc: BOOL Create ( int CEmpWnd::OnCreate( LPCREATESTRUCT lpCreateStruct ) DWORD dwStyle, // Thoâng soá daïng cuûa thanh cuoän { const RECT& rect, // Toïa ñoä, kích thöôùc cuûa thanh cuoän if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; CWnd* pParentWnd, // Con troû ñoái töôïng cöûa soå cha m_staticScroll.Create( _T(""), UINT nID // Soá hieäu thanh cuoän WS_CHILD | WS_VISIBLE, CRect( 10, 15, 120, 35 ), this ); ); Khôûi taïo thoâng soá cho ñoái töôïng thanh cuoän treân giao dieän. m_Scroll.Create( WS_CHILD | WS_VISIBLE | SBS_HORZ, dwStyle: Goàm thoâng soá qui ñònh ñoái vôùi control vaø caùc daïng boå sung: CRect( 10,45,127,65 ), this, IDC_SCROLLBAR ); SBS_HORZ : Thanh cuoän ñaët ngang (horizontal) m_Scroll.SetScrollRange( 0,100 ); SBS_VERT : Thanh cuoän ñaët ñöùng (vertical) return 0; int GetScrollPos( ); Traû veà vò trí hieän thôøi cuûa moät thanh cuoän. } int SetScrollPos ( Haønh vi OnHScroll xöû lyù WM_HSCROLL: int nPos, // Vò trí ñaët nuùt cuoän void CEmpWnd::OnHScroll( UINT nSBCode, UINT nPos, BOOL bRedraw = TRUE // Caäp nhaät laïi hình aûnh thanh cuoän CScrollBar* pScrollBar ) ); Ñaët vò trí nuùt cuoän treân thanh cuoän. { char s[10]; void SetScrollRange ( int pos = nPos; int nMinPos, // Giaù trò nhoû nhaát switch (nSBCode) { int nMaxPos, case SB_LINELEFT: // Giaù trò lôùn nhaát pos = pScrollBar->GetScrollPos() - 1; BOOL bRedraw = TRUE // Caäp nhaät laïi thanh cuoän if (pos < 0) pos = 0; ); AÁn ñònh giôùi haïn vò trí ñaàu vaø cuoái cuûa nuùt cuoän treân thanh cuoän. pScrollBar->SetScrollPos( pos ); void GetScrollRange ( sprintf( s, "%d", pos ); m_staticScroll.SetWindowText(s); LPINT lpMinPos, // Chöùa vò trí ñaàu break; LPINT lpMaxPos // Chöùa vò trí cuoái case SB_LINERIGHT: ); Laáy giaù trò giôùi haïn vò trí ñaàu vaø cuoái cuûa nuùt cuoän treân thanh cuoän. pos = pScrollBar->GetScrollPos() + 1; void ShowScrollBar ( BOOL bShow = TRUE ); Baät / Taét thanh cuoän. if (pos > 90) pos = 100; pScrollBar->SetScrollPos(pos); ScrollBar vaø cöûa soå cha: Ñoái töôïng scrollbar göûi WM_HSCROLL (ñoái vôùi sprintf(s, "%d", pos); m_staticScroll.SetWindowText(s); loaïi scrollbar ngang) hoaëc WM_VSCROLL (ñoái vôùi loaïi scrollbar ñöùng) break; ñeán cöûa soå cha ñeå thoâng baùo traïng thaùi hieän thôøi cuûa noù. Caùc haønh vi case SB_THUMBPOSITION: OnVScroll hoaëc OnHScroll cuûa ñoái töôïng CWnd quaûn lyù cöûa soå cha seõ xöû pScrollBar->SetScrollPos(pos); lyù caùc message töông öùng noùi treân. sprintf(s, "%d", pos); m_staticScroll.SetWindowText(s); break; Thöïc hieän öùng duïng nhö VD15. Boå sung thanh cuoän, vaø muïc thoâng baùo ñeå default: CWnd::OnHScroll(nSBCode, nPos, pScrollBar); hieån thò vò trí nuùt cuoän khi ngöôøi duøng taùc ñoäng leân thanh cuoän. } Taïo döï aùn VD24A nhö döï aùn VD15. Chænh söûa lôùp CEmpWnd nhö sau: } Bieân dòch vaø chaïy thöû öùng duïng. Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Caùc lôùp ñoái töôïng nhaäp lieäu 94 95
- 8.9 CSliderCtrl: CSliderCtrl laø lôùp ñoái töôïng quaûn lyù thanh tröôït treân cöûa soå giao dieän. CSliderCtrl ( ); Taïo laäp ñoái töôïng roãng. BOOL Create ( DWORD dwStyle, // Thoâng soá daïng cuûa thanh tröôït. const RECT& rect, // Toïa ñoä, kích thöôùc cuûa thanh CWnd* pParentWnd, // Con troû ñoái töôïng cöûa soå cha UINT nID // Soá hieäu thanh tröôït ); Khôûi taïo thoâng soá cho ñoái töôïng thanh tröôït treân giao dieän. dwStyle: Goàm thoâng soá qui ñònh ñoái vôùi control vaø caùc daïng boå sung: TBS_HORZ : Thanh tröôït ngang TBS_VERT : Thanh tröôït ñöùng TBS_NOTICKS : Thanh tröôït khoâng coù thöôùc laøm moác. TBS_LEFT, TBS_RIGHT : Thöôùc ñaët traùi/phaûi thanh tröôït ñöùng TBS_TOP, TBS_BOTTOM : Thöôùc ñaët treân/döôùi thanh tröôït ngang TBS_BOTH : Thöôùc ñaët ôû caû hai phía thanh tröôït. int GetPos( ); Traû veà vò trí hieän thôøi cuûa nuùt tröôït treân thanh tröôït. int SetPos( int nPos ); Ñaët vò trí nuùt tröôït treân thanh tröôït. void SetRange ( int nMinPos, // Giaù trò nhoû nhaát int nMaxPos, // Giaù trò lôùn nhaát BOOL bRedraw = TRUE // Caäp nhaät laïi thanh cuoän ); AÁn ñònh giôùi haïn nhoû nhaát vaø lôùn nhaát cuûa thanh tröôït. void GetRange ( LPINT lpMinPos, // Laáy giaù trò nhoû nhaát LPINT lpMaxPos // Laáy giaù trò lôùn nhaát ); Laáy giaù trò giôùi haïn nhoû nhaát vaø lôùn nhaát cuûa thanh tröôït. SliderCtrl vaø cöûa soå cha: Töông töï ScrollBar. THÖÏC HAØNH: 1. Vieát öùng duïng nhö VD18. Taïo 5 icon resource coù noäi dung phoái hôïp hoaït hình trong resource cuûa öùng duïng. Caøi ñaët timer cho CEmpWnd ñeå thöïc hieän ñoåi icon cho ñoái töôïng m_staticIcon tuaàn töï theo thôøi gian vôùi 5 icon noùi treân. 2. Vieát öùng duïng vôùi thanh ProgressBar chaïy theo thôøi gian. Khi progressbar ñaày thì keát thuùc öùng duïng. 3. Thöïc hieän döï aùn töông töï VD24A cho thanh tröôït. Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 96
- CHÖÔNG 9: CTLCOLOR_LISTBOX : Listbox CTLCOLOR_SCROLLBAR : Thanh tröôït Hoäp hoäi thoaïi CTLCOLOR_STATIC : Muïc thoâng baùo virtual int DoModal( ); Kích hoaït dialog kieåu khoùa. Haønh vi chæ keát thuùc khi dialog keát thuùc hoaït ñoäng vaø giaù trò traû veà cuûa noù laø tham soá cuûa 9.1 HOÄP HOÄI THOAÏI (DIALOG): haønh vi EndDialog ñöôïc duøng ñeå keát thuùc dialog. Dialog laø cöûa soå giao dieän vôùi caùc ñaëc ñieåm trang trí ñöôïc moâ taû thoâng qua void EndDialog ( moät caáu truùc ñoäc laäp. Caáu truùc naøy ñöôïc löu tröõ trong resource cuûa öùng duïng, int nResult // Giaù trò tham soá cuûa haønh vi. goïi laø dialog resource. Coù hai kieåu hoaït ñoäng cuûa dialog: ); Haønh vi ñöôïc duøng ñeå keát thuùc hoaït ñoäng cuûa dialog kieåu khoùa. Dialog khoùa (modal dialog): Taùc vuï thöïc hieän dialog phaûi chôø ñeán khi virtual void OnOK( ); Haønh vi keá thöøa ñeå caøi ñaët xöû lyù choïn button coù dialog chaám döùt hoaït ñoäng. soá hieäu IDOK. Trong CDialog, phaàn caøi ñaët cuûa OnOK chæ laø leänh goïi Dialog khoâng khoùa (modeless dialog): Taùc vuï thöïc hieän dialog coù theå haønh vi EndDialog vôùi tham soá IDOK. tieáp tuïc caùc xöû lyù tieáp theo ngay sau leänh thöïc hieän dialog. virtual void OnCancel( ); Haønh vi keá ñeå caøi ñaët xöû lyù choïn button coù soá 9.2 LÔÙP CDialog: hieäu IDCANCEL (phím taét laø ESC). Trong CDialog, caøi ñaët cuûa CDialog laø lôùp ñoái töôïng keá thöøa töø lôùp CWnd, ñöôïc söû duïng ñeå quaûn lyù OnCancel chæ laø leänh goïi haønh vi EndDialog vôùi tham soá IDCANCEL. dialog. Ngoaøi caùc thuoäc tính vaø haønh vi keá thöøa public töø lôùp CWnd, lôùp BOOL Create ( CDialog coù caùc haønh vi boå sung sau ñaây: UINT nIDTemplate, // Soá hieäu dialog resource CDialog ( CWnd* pParentWnd = NULL // Con troû ñoái töôïng cöûa soå cha. UINT nIDTemplate, // Soá hieäu cuûa dialog resource ); Haønh vi kích hoaït dialog kieåu khoâng khoùa. CWnd* pParentWnd = NULL // Con troû ñoái töôïng cöûa soå cha virtual BOOL DestroyWindow( ); Haønh vi ñöôïc duøng ñeå keát thuùc hoaït ); Taïo laäp ñoái töôïng dialog hoaït ñoäng kieåu khoùa. ñoäng cuûa dialog kieåu khoâng khoùa. CDialog( ); Taïo laäp ñoái töôïng dialog hoaït ñoäng kieåu khoâng khoùa. CWnd* GetDlgItem ( virtual BOOL OnInitDialog( ); Haønh vi maø ñoái töôïng dialog söû duïng ñeå int nID // Soá hieäu cuûa control treân dialog xöû lyù WM_INITDIALOG, message do windows göûi ñeán dialog tröôùc ); Traû veà con troû ñoái töôïng thuoäc lôùp CWnd quaûn lyù control. khi kích hoaït dialog. Keá thöøa haønh vi naøy nhaèm thöïc hieän khôûi taïo int GetDlgItemText ( thoâng soá cho dialog vaø caùc controls cuûa noù. int nID, // Soá hieäu cuûa control treân dialog afx_msg HBRUSH OnCtlColor ( CString& rString // Tham bieán kieåu chuoãi chöùa keát quaû CDC* pDC, // Con troû ñoái töôïng DC cuûa control ); Laáy noäi dung chuoãi thoâng baùo cuûa control. CWnd* pWnd, // Con troû ñoái töôïng cöûa soå quaûn lyù control UINT GetDlgItemInt ( UINT nCtlColor // Thoâng tin veà loaïi control ñöôïc trang trí int nID // Soá hieäu cuûa control treân dialog ); Haønh vi xöû lyù WM_CTLCOLOR, message do windows göûi ñeán ); Traû veà giaù trò soá cuûa noäi dung nhaäp trong control. dialog khi coù nhu caàu trang trí moät control treân dialog. void SetDlgItemText ( nCtlColor coù theå laø moät trong caùc giaù trò sau: int nID, // Soá hieäu cuûa control treân dialog CTLCOLOR_BTN : Ñoái töôïng trang trí laø button LPCTSTR lpszString // Giaù trò kieåu chuoãi CTLCOLOR_DLG : Dialog ); Ñaët noäi dung kieåu chuoãi cho control. CTLCOLOR_EDIT : Hoäp nhaäp lieäu Hoäp hoäi thoaïi Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 97 98
- void SetDlgItemInt ( Thieát keá dialog thoâng qua maøn hình thieát keá maø ta vöøa nhaän ñöôïc töø int nID, UINT nValue // Soá hieäu control vaø giaù trò gaùn böôùc treân. Caùc thao taùc cô baûn nhö sau: ); Gaùn giaù trò soá nValue cho control. • Baät / Taét thanh coâng cuï hoã trôï thieát keá dialog: UINT IsDlgButtonChecked ( - Choïn muïc menu Tools / Customize... int nIDButton // Soá hieäu cuûa button control ); Traû veà giaù trò TRUE neáu control ñöôïc ñaùnh daáu choïn. int GetCheckedRadioButton ( int nIDFirstButton, // Soá hieäu nuùt RadioButton ñaàu tieân vaø int nIDLastButton // cuoái cuøng trong nhoùm caùc nuùt RadioButtons ); Traû veà soá hieäu nuùt radioButton ñöôïc ñaùnh daáu choïn. void CheckRadioButton ( int nIDFirstButton, // Soá hieäu nuùt RadioButton ñaàu tieân vaø int nIDLastButton, // cuoái cuøng trong nhoùm caùc nuùt RadioButtons int nIDCheckButton // Soá hieäu nuùt RadioButton ñöôïc ñaùnh daáu. ); Ñaùnh daáu choïn moät nuùt trong nhoùm caùc nuùt RadioButtons. 9.3 TAÏO VAØ SÖÛ DUÏNG DIALOG TRONG CHÖÔNG TRÌNH: Moãi ñoái töôïng dialog hình thaønh trong chöông trình laø keát quaû keát hôïp giöõa lôùp ñoái töôïng keá thöøa töø CDialog vaø dialog resource. Nhö vaäy, ñeå söû duïng dialog trong chöông trình, ta phaûi thöïc hieän hai böôùc sau: Thieát keá dialog resource. - Ñaùnh daáu hoaëc boû ñaùnh daáu muïc Controls. Choïn Close. Khai baùo lôùp keá thöøa töø CDialog söû duïng dialog resource noùi treân. Trong chöông trình, moãi khi coù nhu caàu söû duïng dialog, ta (Thanh coâng cuï vôùi caùc loaïi control söû duïng ñöôïc treân dialog) chæ vieäc khai baùo bieán ñoái • AÁn ñònh caùc ñaëc tính cuûa dialog resource: Right-clict treân khung töôïng thuoäc lôùp noùi treân vaø söû dialog resource (vuøng khoâng caøi controls), choïn muïc Properties: duïng noù moät caùch thích hôïp. Trong phaàn naøy, ta thöïc hieän öùng duïng töông töï VD21. Khi ngöôøi duøng choïn muïc Option treân menu thì hieån thò dialog nhö hình veõ treân. Tröôùc tieân, taïo döï aùn môùi VD25 töông töï döï aùn VD21. Sau ñoù thöïc hieän caùc coâng vieäc sau: 9.3.1 Taïo Dialog resource: Taïo môùi dialog resource: Thöïc hieän töông töï vieäc taïo môùi icon (2.8). Löu yù: Choïn Resource Type laø Dialog. - Choïn General ñeå aán ñònh caùc thoâng soá chung. Ñaët soá hieäu cho dialog resource ( ví duï IDD_OPTION ). Hoäp hoäi thoaïi 100 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 99
- ID Static edge : Khung chìm. : Soá hieäu cuûa dialog resource. Caption : Noäi dung tieâu ñeà cuûa dialog. • Caøi ñoái töôïng hoäp nhaäp leân dialog: Menu : Soá hieäu cuûa menu resource gaén vaøo dialog. - Click choïn bieåu töôïng treân thanh coâng cuï. Font : AÁn ñònh font duøng cho noäi dung chöõ treân dialog. - Thöïc hieän caøi ñaët vaø aán ñònh thoâng soá nhö vôùi muïc thoâng baùo: - Choïn Styles ñeå aán ñònh thoâng soá daïng cöûa soå cuûa dialog: Multi Line : Hoäp nhaäp cho pheùp nhaäp nhieàu doøng. Style : Ñaëc tính cuûa dialog. Chaúng haïn choïn Popup cho AutoHScroll/AutoVScroll : Töï ñoäng tröôït noäi dung khi thoâng pheùp dialog taïo ra coù thoâng soá daïng WS_POPUP. tin nhaäp vöôït quaù kích thöôùc hoäp nhaäp. Border : Kieåu ñöôøng vieàn cuûa dialog. HorizontalScroll | VerticalScroll : Hieån thò thanh tröôït ngang, Title Bar : Dialog coù tieâu ñeà. doïc cuûa hoäp nhaäp. System Menu : Dialog coù hoäp System Menu. Want return : Söû duïng phím enter ñeå xuoáng doøng trong hoäp - Choïn More Styles ñeå aán ñònh caùc thoâng soá daïng môû roäng: nhaäp nhieàu doøng. Visible : Dialog hieån thò. Ñoái vôùi dialog resource duøng cho Password : Duøng nhaäp password. modeless dialog thì muïc naøy phaûi luoân ñöôïc choïn. • Caøi ñoái töôïng comboBox leân dialog: - Choïn Extended Style ñeå aán ñònh caùc thoâng soá daïng môû roäng: - Click choïn bieåu töôïng treân thanh coâng cuï. ToolWindow : Töông öùng WS_EX_TOOLWINDOW. - Thöïc hieän caøi ñaët vaø aán ñònh thoâng soá nhö vôùi muïc thoâng baùo: Static edge : Vuøng client ñöôïc chìm xuoáng (3D). Data : Chöùa caùc muïc choïn. Caùc muïc naøy ñöôïc nhaäp treân caùc Goõ phím Enter ñeå keát thuùc. doøng khaùc nhau. Löu yù duøng phím Ctrl+Enter ñeå xuoáng doøng. Type : Kieåu comboBox. • Caøi ñoái töôïng muïc thoâng baùo leân dialog: Sort : Caùc muïc trong comboBox ñöôïc saép xeáp theo noäi dung. - Click choïn bieåu töôïng treân thanh coâng cuï. • Caøi ñoái töôïng comboBox leân dialog: - Drag chuoät treân vuøng daønh cho muïc thoâng baùo treân dialog. - Click choïn bieåu töôïng treân thanh coâng cuï. - Right-click treân ñoái töôïng muïc thoâng baùo vöøa caøi ñaët, choïn muïc Properties. Thöïc hieän caùc aán ñònh caàn thieát: - Thöïc hieän caøi ñaët vaø aán ñònh thoâng soá nhö vôùi muïc thoâng baùo: Selection : Kieåu listbox. ID : Soá hieäu muïc thoâng baùo, maëc nhieân IDC_STATIC. Ñeå Multi-column : Listbox coù nhieàu coät. dialog nhaän dieän ñöôïc muïc khi xöû lyù message thì giaù trò naøy Want Key Input : Lisbox cho pheùp xöû lyù phím. phaûi ñöôïc khai baùo töôøng minh vaø duy nhaát. Caption : chuoãi thoâng baùo • Caøi ñoái töôïng button leân dialog: Style : - Click choïn bieåu töôïng treân thanh coâng cuï. Visible : Neáu ñaùnh daáu thì muïc ñöôïc hieån thò. - Thöïc hieän caøi ñaët vaø aán ñònh thoâng soá nhö vôùi muïc thoâng baùo: Default Button: Button öùng vôùi phím taét laø Enter. Align Text : Canh chænh noäi dung thoâng baùo trong muïc. Multi-lines: Noäi dung thoâng baùo cuûa button coù nhieàu doøng. Center Vertically : Canh chænh giöõa noäi dung thoâng baùo theo Notify : Button coù khaû naêng thoâng tin cho cöûa soå cha. chieàu doïc trong muïc. Border : Coù khung bao quanh muïc thoâng baùo. • Ñaùnh daáu choïn caùc ñoái töôïng treân dialog: Thöïc hieän thao taùc click. Sunken : Khung chìm. Phoái hôïp phím Shift hoaëc Ctrl ñeå ñaùnh daáu nhieàu ñoái töôïng. Notify : Muïc thoâng baùo coù khaû naêng thoâng tin cho cöûa soå cha. • Chænh vò trí cuûa moät ñoái töôïng: Thöïc hieän thao taùc drag ñoái töôïng. Extened style : • Chænh kích thöôùc cuûa moät ñoái töôïng: Transparent : Neàn muïc trong suoát. - Click choïn ñoái töôïng. Hoäp hoäi thoaïi 102 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 101
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Lập trình windows với MFC Micrisoft visual C++6.0- P1
10 p | 273 | 96
-
Lập trình windows với MFC Micrisoft visual C++6.0- P2
10 p | 217 | 69
-
Lập trình windows với MFC Micrisoft visual C++6.0- P10
10 p | 166 | 46
-
Lập trình windows với MFC Micrisoft visual C++6.0- P3
10 p | 203 | 45
-
Lập trình windows với MFC Micrisoft visual C++6.0- P13
10 p | 161 | 40
-
Lập trình windows với MFC Micrisoft visual C++6.0- P5
10 p | 168 | 33
-
Lập trình windows với MFC Micrisoft visual C++6.0- P9
10 p | 139 | 33
-
Lập trình windows với MFC Micrisoft visual C++6.0- P4
10 p | 104 | 30
-
Lập trình windows với MFC Micrisoft visual C++6.0- P11
10 p | 123 | 30
-
Lập trình windows với MFC Micrisoft visual C++6.0- P8
10 p | 108 | 25
-
Lập trình windows với MFC Micrisoft visual C++6.0- P12
10 p | 144 | 22
-
Lập trình windows với MFC Micrisoft visual C++6.0- P7
10 p | 101 | 19
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn