1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

16 2 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 1,79 MB

Nội dung

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