560 likes | 758 Views
LẬP TRÌNH WINDOWS. Giới thiệu tổng quan về học phần lập trình Windows. Mục tiêu. Môn học cung cấp cho sinh viên kiến thức về phương pháp lập trình trên môi trường Windows – Cơ chế quản lý chương trình và xử lý Cơ chế quản lý chương trình và xử lý thông điệp trên Windows
E N D
LẬP TRÌNH WINDOWS Giớithiệutổngquanvềhọcphầnlậptrình Windows
Mụctiêu • Môn học cung cấp cho sinh viên kiến thức về phươngpháp lập trình trên môi trường Windows • – Cơ chế quản lý chương trình và xử lý Cơ chế quản lý chương trình và xử lý thông điệp trên Windows • – Lập trình giao diện đồ họa - người dùng (GUI) • – Cơ chế giao tiếp thiết bị đồ họa (GDI) • – Cơ chế quản lý bộ nhớ, tập tin. • – Môn học này trình bày phương pháp lập trình API trênWindows 32 và kỹ thuật lập trình MFC với ngôn ngữ minhhọa là Visual C++ 6.0
Đềcươngmônhọc (5đvht = 75t) • • Chương 1: Khái niệm về lập trình Windows • • Chương 2: Kỹ thuật lập trình Visual C++ (MFC) • • Chương 3: Quản lý bộ nhớ • • Chương 4: Thư viện đồ họa GDI • • Chương 5: Thư viện liên kết động • • Chương 6: Lập trình CSDL ADO – SQL Server • • Chương 7: Lập trình đa tiểu trình
Thựchànhvàthikếtthúchọcphần • • Bàitậplớp (project): • - Sốlượng: 2 bài, mỗibài 1.5đ (chiếm 30%) • • Thikếtthúchọcphần: • -Hìnhthức: thitrựctiếptrênmáy • -Điểm: 7đ (70%)
Bàitập project • • Bàitập project 1 • – Nội dung: Lập trình căn bản, xây dựng ứng dụng • tươngtựnhư: Paint, Calculator, Telephone,… • – Kiếnthứcliênquan: Dialogs, Menu, Toolbar, GDI,… • • Bàitập project 2 • – Nội dung: Lập trình cơ sở dữ liệu • – Cơ sở dữ liệu: Access 2003 hoặc SQL Server 2000,…
Nộpbàitập project • • Bàitập project 1 • – Nộpvàogiữakỳ • – SV nộpcholớptrưởng • • Bàitập project 2 • – Nộpvàocuốihọckỳ, trướckhithithựchành 1 tuần • – SV nộpcholớptrưởng
Bàitậpmiễnthi – Làmộtdạngbàitập project nângcao, liênquanđến một chủ đề do GV đề xuất, sinh viên tự thựchiện. – Sinhviênlàmbàitậpmiễnthisẽkhôngphảilàm 2 bàitập project bắtbuộctrên. – Trong trường hợp sinh viên không được miễn thi,điểm bài tập miễn thi sẽ được tính là điểm bài tậpproject (tối đa 3đ).
Bàitậpmiễnthi • • Nội dung • – Báo cáo viết mô tả ứng dụng theo mẫu qui định • – CD chương trình được tổ chức theo mẫu qui định • • Nộpbài • – Thời gian: sinh viên nộp bài vào cuối học kỳ, trướckhithithựchành 2 tuần. • – Nộpbàitrựctiếpchogiáoviênlýthuyết
MỘT SỐ KHÁI NIỆM CƠ BẢN • Mộtsốkháiniệmcơbản • Lậptrìnhsựkiện – thôngđiệp • Môhìnhlậptrình windows
Nội dung • Một số điểm khác biệt giữa lập trình Windows & DOS • Một số khái niệm cơ bản • Lậptrìnhsựkiện (Even driven programming) • Các thành phần giao diện đồ họa GUI • Môhìnhlậptrình Windows • Tàinguyêncủaứngdụng (Resource) • Thư viện lập trình Windows • Một chương trình tổng quát xây dựng trên Win API
Nội dung • Một số điểm khác biệt giữa lập trình Windows & DOS • Một số khái niệm cơ bản • Lậptrìnhsựkiện (Even driven programming) • Các thành phần giao diện đồ họa GUI • Môhìnhlậptrình Windows • Tàinguyêncủaứngdụng (Resource) • Thư viện lập trình Windows • Một chương trình tổng quát xây dựng trên Win API
Lậptrình Windows & DOS Chươngtrình minh họatrongmôitrường Windows
Nội dung • Một số điểm khác biệt giữa lập trình Windows & DOS • Một số khái niệm cơ bản • Lậptrìnhsựkiện (Even driven programming) • Các thành phần giao diện đồ họa GUI • Môhìnhlậptrình Windows • Tàinguyêncủaứngdụng (Resource) • Thư viện lập trình Windows • Một chương trình tổng quát xây dựng trên Win API
Nội dung • Một số điểm khác biệt giữa lập trình Windows & DOS • Một số khái niệm cơ bản • Lậptrìnhsựkiện (Even driven programming) • Các thành phần giao diện đồ họa GUI • Môhìnhlậptrình Windows • Tàinguyêncủaứngdụng (Resource) • Thư viện lập trình Windows • Một chương trình tổng quát xây dựng trên Win API
Sựkiệnvàxửlýthôngđiệp • // Vòng lặp xử lý thông điệp trong 1 ứng dụng • // Message loop • MSG msg; • // lấy thông điệp ra khỏi hàng đợi của ứng dụng • while (GetMessage(&msg, NULL, 0, 0)) • { • // chuyển đổi thành các thông điệp • TranslateMessage(&msg); • // chuyển message đến hàm xử lý thông điệp của cửa • // sổ tương ứng • DispatchMessage(&msg); • }
Nội dung • Một số điểm khác biệt giữa lập trình Windows & DOS • Một số khái niệm cơ bản • Lậptrìnhsựkiện (Even driven programming) • Các thành phần giao diện đồ họa GUI • Môhìnhlậptrình Windows • Tàinguyêncủaứngdụng (Resource) • Thư viện lập trình Windows • Một chương trình tổng quát xây dựng trên Win API
Cácthànhphầngiaodiệnđồhọa GUI • • GUI: Graphics User Interface • • Cácdạng GUI cơbản • • Cửasổ • - Địnhnghĩa • - Nguyêntắcquảnlý • - Phânloại • - Lớpcửasổ • - Hàmxửlýthôngđiệp • - Cácthuộctính
Cácthànhphầngiaodiệnđồhọa GUI • 1. SDI - Single Document Interface • Mộtcửasổlàmviệc • Cho phép thay đổi kích thước cửa sổ (Resizeable) • Khôngcócáccửasổ con • Vídụ: NotePad, Paint,… • 2. MDI - Multiple Document Interface • Mộtcửasổlàmviệcchính (Frame window) vànhiềucửasổ con (Childwindow) • Cho phép thay đổi kích thước cửa sổ (Resizeable) • Cho phép Maximize/Minimize/Close cáccửasổ con • Vídụ: Word, Excel, VC++,… • 3 . Dialog • Mộtcửasổlàmviệc • Thường kích thước cố định • Thường không có menu bar • Thường có các button, edit box, list-box,… • Vídụ: Calculator, CD Player,…
GUI • • Địnhnghĩa: • là 1 vùngchữnhậttrênmànhình, • dùng để hiển thị kết quả output, • và nhận các input từ người dùng • =>Công việc đầu tiên của 1 ứng dụng GUI là tạo 1cửasổlàmviệc • • Nguyêntắcquảnlý: • Mô hình phân cấp: mỗi cửa sổ đều có 1 cửa sổ cha (parent window), ngoạitrừcửasổnền Desktop • Tại mỗi thời điểm, chỉ có 1 cửa sổ nhận input từ user • (Active/Focused window)
Một chương trình tổng quátxây dựng trên Win32 API • Các bước tạo lập chương trình • Hàm bắt đầu • WinMain • Đăng ký lớp cửa sổ • Tạo lập cửa sổ giao diện • Thực hiện vòng lặp xử lý message • Menu script • Hàm xử lý message của cửa sổ
HàmWinMain • #include <windows.h> • LONG WINAPI WndProc (HWND, UINT, WPARAM, PARAM); • int WINAPI WinMain (HINSTANCE hInstance, • HINSTANCE hPrevInstance, • LPSTR lpszCmdLine, int nCmdShow) • { • //Khai báo lớp cửa sổ • //Đăng ký lớp cửa sổ • //Tạo lập cửa sổ • //Hiển thị cửa sổ • //Thực hiện vòng lặp xử lý thông điệp • }
HàmWinMain • #include <windows.h> • LONG WINAPI WndProc (HWND, UINT, WPARAM, PARAM); • int WINAPI WinMain (HINSTANCE hInstance, • HINSTANCE hPrevInstance, • LPSTR lpszCmdLine, int nCmdShow) • { • //Khai báo lớp cửa sổ • //Đăng ký lớp cửa sổ • //Tạo lập cửa sổ • //Hiển thị cửa sổ • //Thực hiện vòng lặp xử lý thông điệp • }
HàmWinMain • #include <windows.h> • LONG WINAPI WndProc (HWND, UINT, WPARAM, PARAM); • int WINAPI WinMain (HINSTANCE hInstance, • HINSTANCE hPrevInstance, • LPSTR lpszCmdLine, int nCmdShow) • { • //Khai báo lớp cửa sổ • //Đăng ký lớp cửa sổ • //Tạo lập cửa sổ • //Hiển thị cửa sổ • //Thực hiện vòng lặp xử lý thông điệp • }
Khaibáolớpcửasổ • WNDCLASS wc; • HWND hwnd; • MSG msg; • wc.style = 0; // Class style • wc.lpfnWndProc = (WNDPROC) WndProc; // Window procedure • address wc.cbClsExtra = 0; // Class extra bytes • wc.cbWndExtra = 0; // Window extra bytes • wc.hInstance = hInstance; // Instance handle • wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); // Icon handle • wc.hCursor = LoadCursor (NULL, IDC_ARROW); // Cursor handle • //Background color • wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); • wc.lpszMenuName = NULL; // Menu name • wc.lpszClassName = "MyWndClass"; // WNDCLASS name
Cấutrúc WNDCLASS • typedefstruct WNDCLASS { • UINT style; • WNDPROC lpfnWndProc; • intcbClsExtra; • intcbWndExtra; • HINSTANCE hInstance; • HICON hIcon; • HCURSOR hCursor; • HBRUSH hbrBackground ; • LPCTSTR lpszMenuName; • LPCTSTR lpszClassName; • } WNDCLASS, *PWNDCLASS;
HàmWinMain • #include <windows.h> • LONG WINAPI WndProc (HWND, UINT, WPARAM, PARAM); • int WINAPI WinMain (HINSTANCE hInstance, • HINSTANCE hPrevInstance, • LPSTR lpszCmdLine, int nCmdShow) • { • //Khai báo lớp cửa sổ • //Đăng ký lớp cửa sổ • //Tạo lập cửa sổ • //Hiển thị cửa sổ • //Thực hiện vòng lặp xử lý thông điệp • }
HàmWinMain • #include <windows.h> • LONG WINAPI WndProc (HWND, UINT, WPARAM, PARAM); • int WINAPI WinMain (HINSTANCE hInstance, • HINSTANCE hPrevInstance, • LPSTR lpszCmdLine, int nCmdShow) • { • //Khai báo lớp cửa sổ • //Đăng ký lớp cửa sổ • //Tạo lập cửa sổ • //Hiển thị cửa sổ • //Thực hiện vòng lặp xử lý thông điệp • }
Hiển thị cửa sổ - vòng lặp xử lý thông điệp • ShowWindow (hwnd, nCmdShow); • UpdateWindow (hwnd); • while (GetMessage (&msg, NULL, 0, 0)) • { • TranslateMessage (&msg); • DispatchMessage (&msg); • } • return msg.wParam;
Hàmxửlý Message củacửasổ • LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, • WPARAM wParam, LPARAM lParam) • { • PAINTSTRUCT ps; • HDC hdc; • switch (message) { • case WM_PAINT: • hdc = BeginPaint (hwnd, &ps); • Ellipse (hdc, 0, 0, 200, 100); • EndPaint (hwnd, &ps); • return 0; • case WM_DESTROY: • PostQuitMessage (0); • return 0; • } • return DefWindowProc (hwnd, message, wParam, lParam); • }