Chương 3: Lập trình C++ trên Windows

Phương pháp OOP và trên 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 trên cửa sổ Một số thông điệp cơ bản

pdf16 trang | Chia sẻ: lylyngoc | Lượt xem: 1605 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Chương 3: Lập trình C++ trên Windows, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Chương 3: Lập trình C++ trên Windows Phương pháp OOP và trên 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 trên cửa sổ Một số thông điệp cơ bản 3.1- Phương pháp OOP và trên 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 cơ bản trong lập trình hướng đối tượng  Các kỹ thuật OOP trong C++: xây dựng lớp, thành viên, kế thừa, đối tượng và xử lý đối tượng, cơ chế ảo và đa hình,...  Thư viện MFC cung cấp OOP trên Windows MFC APILõi của Windows Programmer 3.2- Xây dựng lớp ứng dụng  Các thành phần chính ?  Lớp ứng dụng kế thừa từ CWinApp:  BOOL InitInstance()  m_pMainWnd  m_pActiveWnd  m_hInstance Chương trình Khai báo thư viện Xây dựng các lớp cho chương trình Tạo đối tượng chương trình MFC CWinApp C… … Chương trình CT Kế thừa  Cách viết lớp chương trình ?  Một số hàm MFC cơ bản ?  AfxMessageBox( thông-báo [, kiểu ] );  CWinApp* AfxGetApp();  CWnd* AfxGetMainWnd(); … class CT : public CWinApp { public: BOOL InitInstance() { ….. Viết các lệnh khởi tạo chương trình …… return 1; } }; 3.2- Xây dựng lớp ứng dụng  Một chương trình MFC đơn giản 3.2- Xây dựng lớp ứng dụng CT a; class CT : public CWinApp { pubic: BOOL InitInstance() { AfxMessageBox( “Chuong trinh don gian” ); return 1; } }; #include Chương trình MFC Cơ chế đa hình và phương thức ảo  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 );  MessageBox( text );  ... 3.3- Xây dựng lớp cửa sổ MFC CFrameWnd C… … Chương trình CS Kế thừa CWinApp CT  Mẫu lập trình lớp cửa sổ  Tạo đối tượng cửa sổ trong lớp ứng dụng m_pMainWnd = new CS; 3.3- Xây dựng lớp cửa sổ class CS : public CFrameWnd { public: CS() { …. Tạo và hiển thị cửa sổ lên màn hình …. } ... Lập trình các thành viên lớp cửa sổ ... }; #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;  Một chương trình có cửa sổ đơn giản 3.3- Xây dựng lớp cửa sổ Xử lý các thông điệp đáp ứng yêu cầu người dùng Lớp cửa sổ Phương thức xử lý thông điệp 3.4- Xử lý thông điệp trên cửa sổ  Cơ chế xử lý thông điệp trong MFC ?  Lớp có khai báo xử lý thông điệp ?  Khai báo trong lớp : DECLARE_MESSAGE_MAP()  Cài đặt ngoài lớp : BEGIN_MESSAGE_MAP( derived, base ) …ánh-xạ-thông-điệp… END_MESSAGE_MAP()  Mẫu phương thức xử lý thông điệp afx_msg void On( tham-số ); Hàng đợi thông điệp MFC API #include class CT : public CWinApp { ........ }; class CS :public CFrameWnd { public: (Xử lý thông điệp - Method) }; CT a; #include int WINAPI WinMain( ... ) { ........ } LRESULT CALLBACK hàmCS(...) { (Xử lý thông điệp - IF) } Thư viện Lớp cửa sổ vs Hàm cửa sổ Lớp ứng dụng vs Hàm chính Đối tượng CT  So sánh giữa lập trình MFC & API ? 3.4- Xử lý thông điệp trên cửa sổ 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 ); …  Một số thông điệp cơ bản ? 3.4- Xử lý thông điệp trên cửa sổ 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); } DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP( CS, CFrameWnd ) ON_WM_SIZING() ............................. END_MESSAGE_MAP() Hàm xử lý thông điệp Khai báo lớp có ánh xạ thông điệp Ánh xạ các thông điệp có xử lý 3.4- Xử lý thông điệp trên cửa sổ  Ví dụ cách xử lý thông điệp trong MFC  Các thông điệp bàn phím và mẫu hàm xử lý WM_CHAR Nhấn các phím ký tự OnChar (UINT c, UINT r, UINT f); WM_KEYDOWN Nhấn xuống các phím OnKeyDown (UINT c, UINT r, UINT f); WM_KEYUP Nhả các phím OnKeyUp (UINT c, UINT r, UINT f);  Ý nghĩa các tham số UINT c: mã phím đã được gõ {VK_F1,...,F12, VK_HOME, VK_INSERT, ... } UINT r: số lượng ký tự được sinh ra khi giữ phím UINT f: các trạng thái khác của bàn phím  A WM_KEYDOWN WM_CHAR WM_KEYUP OnKeyDown (c=65,...) OnChar (c=65,...) OnKeyUp (c=65,...) 1 2 3 3.5- Một số thông điệp cơ bản  Các thông điệp chuột và 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 các tham số trong các hàm xử lý thông điệp trên UINT f: trạng thái các phím gồm các giá trị {MK_CONTROL, MK_LBUTTON, MK_MBUTTON, MK_RBUTTON, MK_SHIFT} CPoint p: tọa độ điểm nhấn chuột trên cửa sổ gồm {x, y} 3.5- Một số thông điệp cơ bản OnLButtonDown(UINT, CPoint{x,y}) WM_LBUTTONDOWN OnLButtonUp( f=? , p={x,y} ) WM_LBUTTONUP OnMouseMove( f=? , p={x,y} ) WM_MOUSEMOVE OnRButtonDown( f=? , p={x,y} ) WM_RBUTTONDOWN OnRButtonUp( f=? , p={x,y} ) WM_RBUTTONUP  3.5- Một số thông điệp cơ bản  Phát sinh do thực hiện các thao tác cơ bản trên 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 là số hiệu lệnh, lp là tham số chứa thông tin của lệnh.  Bảng giá trị ý nghĩa tham số id ở trên  Nhắc lại một số lệnh cơ bản GetWindowRect( LPRECT rect ); GetClientRect( LPRECT rect ); ShowScrollBar(UINT bar, BOOL redraw ); CreateSolidCaret( width, height ); ShowCaret(); SetCaretPos( POINT p ); SetClassLong( HWND, index, new ); id Ý nghĩa 61458 Dịch chuyển 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 trên 61444 Kéo góc trái trên 61447 Kéo góc trái dưới 61448 Kéo góc phải dưới 3.5- Một số thông điệp cơ bản