Bài giảng Lập trình Windows - Chương 3: Lập trình C++ trên Windows (2016)

16 1 0
Bài giảng Lập trình Windows - Chương 3: Lập trình C++ trên Windows (2016)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 3: Lập trình C++ Windows  Phương pháp OOP Windows  Xây dựng lớp ứng dụng  Xây dựng lớp cửa sổ  Xử lý thông điệp cửa sổ  Một số thông điệp 3.1- Phương pháp OOP Windows   Phương pháp lập trình hướng đối tượng  Lập trình OOP so với lập trình cấu trúc  Các khái niệm lập trình hướng đối tượng  Các kỹ thuật OOP C++: xây dựng lớp, thành viên, kế thừa, đối tượng xử lý đối tượng, chế ảo đa hình, Thư viện MFC cung cấp OOP Windows MFC Lõi Windows API Programmer 3.2- Xây dựng lớp ứng dụng  Các thành phần ? Chương trình Khai báo thư viện Xây dựng lớp cho chương trình MFC Tạo đối tượng chương trình C… CWinApp  Lớp ứng dụng kế thừa từ CWinApp:     BOOL InitInstance() m_pMainWnd m_pActiveWnd m_hInstance Kế thừa CT Chương trình … 3.2- Xây dựng lớp ứng dụng  Cách viết lớp chương trình ? class CT : public CWinApp { public: BOOL InitInstance() { … Viết lệnh khởi tạo chương trình …… return 1; } };  Một số hàm MFC ?    AfxMessageBox( thông-báo [, kiểu ] ); CWinApp* AfxGetApp(); CWnd* AfxGetMainWnd(); … 3.2- Xây dựng lớp ứng dụng  Một chương trình MFC đơn giản Chương trình MFC #include class CT : public CWinApp { pubic: BOOL InitInstance() { AfxMessageBox( “Chuong trinh don gian” ); return 1; } }; CT a; Cơ chế đa hình phương thức ảo 3.3- Xây dựng lớp cửa sổ  Lớp cửa sổ kế thừa từ CFrameWnd:           m_hWnd Create( class, title ); ShowWindow( mode ); UpdateWindow(); MoveWindow( x,y, w,h / LPCRECT ); GetWindowRect( LPCRECT ); GetClientRect( LPCRECT ); SetWindowText( title ); CT MessageBox( text ); MFC C… CWinApp … CFrameWnd Kế thừa CS Chương trình 3.3- Xây dựng lớp cửa sổ  Mẫu lập trình lớp cửa sổ class CS : public CFrameWnd { public: CS() { … Tạo hiển thị cửa sổ lên hình … } Lập trình thành viên lớp cửa sổ };  Tạo đối tượng cửa sổ lớp ứng dụng m_pMainWnd = new CS; 3.3- Xây dựng lớp cửa sổ  Một chương trình có cửa sổ đơn giản #include //==================================================== class CS : public CFrameWnd { public: CS() { Create( 0, “Chuong trinh MFC” ); ShowWindow(1); UpdateWindow(); } }; //=================================================== class CT : public CWinApp { public: BOOL InitInstance() { m_pMainWnd = new CS; return 1; } }; //=================================================== CT a; 3.4- Xử lý thông điệp cửa sổ  Cơ chế xử lý thông điệp MFC ? Lớp cửa sổ Hàng đợi thông điệp  Mẫu phương thức xử lý thông điệp afx_msg  void On( tham-số ); Lớp có khai báo xử lý thơng điệp ?   Khai báo lớp : DECLARE_MESSAGE_MAP() Cài đặt ngồi lớp : BEGIN_MESSAGE_MAP( derived, base ) …ánh-xạ-thơng-điệp… END_MESSAGE_MAP() Xử lý thông điệp đáp ứng yêu cầu người dùng Phương thức xử lý thông điệp 3.4- Xử lý thông điệp cửa sổ  So sánh lập trình MFC & API ? MFC #include API Thư viện class CS :public CFrameWnd { public: (Xử lý thông điệp - Method) }; Lớp cửa sổ vs Hàm cửa sổ class CT : public CWinApp { }; Lớp ứng dụng vs Hàm CT Đối tượng CT a; #include LRESULT CALLBACK hàmCS( ) { (Xử lý thông điệp - IF) } int WINAPI WinMain( ) { } 3.4- Xử lý thông điệp cửa sổ  Một số thông điệp ? Tên thông điệp Mẫu hàm xử lý thông điệp WM_CLOSE WM_DESTROY OnClose(); OnDestroy(); WM_SIZING WM_SIZE OnSizing( UINT side, LPRECT rect ); OnSize( UINT type, int cx, int cy ); WM_MOVING WM_MOVE OnMoving( UINT side, LPRECT rect ); OnMove( int x, int y ); WM_ACTIVATE OnActivate( UINT state, CWnd *other, BOOL min); WM_TIMER OnTimer( UINT sh ); WM_KEYDOWN WM_CHAR WM_KEYUP OnKeyDown( UINT c, UINT r, UINT f ); OnChar( UINT c, UINT r, UINT f ); OnKeyUp( UINT c, UINT r, UINT f ); WM_MOUSEMOVE WM_LBUTTONDOWN WM_LBUTTONUP … OnMouseMove( UINT f, CPoint p ); OnLButtonDown( UINT f, CPoint p ); OnLButtonUp( UINT f, CPoint p ); … 3.4- Xử lý thông điệp cửa sổ  Ví dụ cách xử lý thơng điệp MFC class CS : public CFrameWnd { public: void OnSizing (UINT s, LPRECT r) { char t[100]; sprintf(t,"Sizing is (left=%d,top=%d) & (right=%d,bottom=%d)", r->left,r->top,r->right,r->bottom); SetWindowText(t); Hàm xử lý } thông điệp DECLARE_MESSAGE_MAP() }; Khai báo lớp có ánh BEGIN_MESSAGE_MAP( CS, CFrameWnd ) ON_WM_SIZING() END_MESSAGE_MAP() xạ thông điệp Ánh xạ thơng điệp có xử lý 3.5- Một số thông điệp A   WM_KEYDOWN OnKeyDown (c=65, ) WM_CHAR OnChar (c=65, ) WM_KEYUP OnKeyUp (c=65, ) Các thơng điệp bàn phím mẫu hàm xử lý WM_CHAR Nhấn phím ký tự OnChar (UINT c, UINT r, UINT f); WM_KEYDOWN Nhấn xuống phím OnKeyDown (UINT c, UINT r, UINT f); WM_KEYUP Nhả phím OnKeyUp (UINT c, UINT r, UINT f); Ý nghĩa tham số UINT c: mã phím gõ {VK_F1, ,F12, VK_HOME, VK_INSERT, } UINT r: số lượng ký tự sinh giữ phím UINT f: trạng thái khác bàn phím 3.5- Một số thông điệp   Các thông điệp chuột mẫu hàm xử lý WM_MOUSEMOVE Di chuyển chuột OnMouseMove (UINT f,CPoint p); WM_LBUTTONDOWN Nhấn nút trái OnLButtonDown (UINT f,CPoint p); WM_LBUTTONUP Nhả nút trái OnLButtonUp (UINT f, CPoint p); WM_RBUTTONDOWN Nhấn nút phải OnRButtonDown (UINT f,CPoint p); WM_RBUTTONUP Nhả nút phải OnRButtonUp (UINT f, CPoint p); WM_LBUTTONDBLCLK Nhấn đúp nút trái OnLButtonDblClk (UINT f, CPoint p); WM_RBUTTONDBLCLK Nhấn đúp nút phải OnRButtonDblClk (UINT f, CPoint p); Ý nghĩa tham số hàm xử lý thông điệp UINT f: trạng thái phím gồm giá trị {MK_CONTROL, MK_LBUTTON, MK_MBUTTON, MK_RBUTTON, MK_SHIFT} CPoint p: tọa độ điểm nhấn chuột cửa sổ gồm {x, y} 3.5- Một số thông điệp WM_LBUTTONDOWN WM_LBUTTONUP WM_RBUTTONDOWN  OnLButtonDown(UINT, CPoint{x,y}) OnLButtonUp( f=? , p={x,y} ) OnRButtonDown( f=? , p={x,y} ) WM_RBUTTONUP OnRButtonUp( f=? , p={x,y} ) WM_MOUSEMOVE  OnMouseMove( f=? , p={x,y} ) 3.5- Một số thông điệp Phát sinh thực thao tác cửa sổ như: đóng, dịch chuyển, thay đổi kích thước,…  Mẫu hàm xử lý void OnSysCommand ( UINT id, LPARAM lp ); id số hiệu lệnh, lp tham số chứa thông tin lệnh id Ý nghĩa  Bảng giá trị ý nghĩa tham số id 61458 Dịch chuyển  Nhắc lại số lệnh  GetWindowRect( LPRECT rect ); GetClientRect( LPRECT rect ); ShowScrollBar(UINT bar, BOOL redraw ); CreateSolidCaret( width, height ); ShowCaret(); SetCaretPos( POINT p ); SetClassLong( HWND, index, new ); 61443 Kéo lên 61458 Kéo xuống 61441 Kéo trái 61442 Kéo phải 61445 Kéo góc phải 61444 Kéo góc trái 61447 Kéo góc trái 61448 Kéo góc phải

Ngày đăng: 24/10/2023, 19:29

Tài liệu cùng người dùng

Tài liệu liên quan