Event-driven programming model trong C# WM_PAINT WM_MOUSEMOVE WM_KEYDOWN OnKeyDown OnMouseMove OnPaint Messages Message queue Application Message handlers gọi các sự kiện tuơng ứng. Ap[r]
(1)Lập trình Windows
Chương Lập trình C# Windows
(2)Nội dung
(3)(4)Khái niệm thông điệp (Message)
• Là số nguyên quy ước trước Windows
ứng dụng (Application)
• Các liệu nhập (từ bàn phím, từ chuột, …)
Windows chuyển thành message số thông tin kèm theo message
• Ví dụ
(5)5
Hàng đợi
• System Queue
• Windows chứa message hàng đợi gọi hàng đợi hệ
thống
• Application Queue
• Các ứng dụng có hàng đợi riêng để chứa message ứng dụng
gọi hàng đợi ứng dụng
• Windows tự động phân bố message từ System Queue
(6)Lập trình Windows
Hardware input
Hệ điều hành Windows
Ứng dụng A
Nhận xử lý
Ứng dụng B
Nhận xử lý Message loop
Message loop System
Queue
Application Queue A
(7)7
Event-driven programming model
• Message loop (vịng lặp thơng điệp)
• Mỗi Application tại thời điểm có message loop để lấy
message Application Queue để phân bố cho cửa sổ (Window) Application
• Hàm Window Procedure
• Mỗi cửa sổ (Window) Application có hàm Window
(8)Event-driven programming model WM_PAINT WM_MOUSEMOVE WM_KEYDOWN OnKeyDown OnMouseMove OnPaint Messages Message queue
Application Message handlers
(9)9
Event-driven programming model
• Ứng dụng phản ứng kiện (nhấn phím, click chuột, .)
bằng cách xử lý message Windows gởi đến
• Một ứng dụng Windows điển hình thực lượng lớn
xử lý để phản hồi message nhận Và message nó chờ message đến
• Message queue: Các message chờ message queue
(10)Event-driven programming model
• Hàm Main: Tạo cửa sổ vào message loop • Message loop
• Nhận message phân bố chúng đến Window Procedure
cửa sổ
• Message loop kết thúc nhận WM_QUIT (chọn Exit từ menu
File, click lên close button)
• Window Procedure:
• Phần lớn đoạn mã đặt Window Procedure • Window Procedure xử lý message gởi đến cửa sổ
• Window Procedure điển hình chứa câu lệnh switch lớn với case
một message riêng
(11)11
Event-driven programming model C#
• Message Loop Application.Run() • Window Form
• Window Procedure WndProc(ref Message m)
•Phần lớn Message handlers cài đặt sẵn lớp có
thể nhận message (Control, Form, Timer,…) dạng:
protected void OnTenMessage(xxxEventArgs e)
(xxxEventArgs EventArgs hay lớp EventArgs)
• Mỗi message có biến event tương ứng
• Các Message handlers gọi event tương ứng
message
(12)Event-driven programming model C# WM_PAINT WM_MOUSEMOVE WM_KEYDOWN OnKeyDown OnMouseMove OnPaint Messages Message queue Application Message handlers gọi kiện tuơng ứng
Application.Run()
WndProc(ref Message m)
(13)Tạo ứng dụng
(14)Các bước tạo ứng dụng Windows
• Bước 1:
• Thiết kế giao diện
• Bước 2:
• Xử lý message Windows gởi đến
• Bước 3:
(15)15
Các bước tạo ứng dụng Windows
• Cách 1: Trực tiếp – thừa kế
• Thiết kế giao diện
• Tạo lớp thừa thừa kế từ lớp Form • Bố cục control
• Thiết lập property cho control
• Xử lý thơng điệp Windows gởi đến: cách override
message handler
(16)Các bước tạo ứng dụng Windows
• Cách 2: Gián tiếp qua field event
• Thiết kế giao diện
• Bố cục control
• Thiết lập property cho control
(17)17
Các bước để tạo ứng dụng Windows
• Bước 1: Tạo Empty Project
• File New Project
• Project Type: Visual C# Windows • Template: Empty Project
• Bước 2: Thêm references
• Click phải lên References Add Reference
• System.Windows.Forms • System.Drawing
• [System.Core]
• Bước 2: using namespace
using System.Windows.Forms; using System.Drawing;
• Bước 3: Thêm class file
• Click phải lên project Add Class
• Bước 4: Viết code
(18)Dùng Form, Không thừa kế
class Program {
static void Main() {
Form form = new Form();
form.Text = “First Application”; Application.Run(form);
(19)19
Dùng Form, Không thừa kế
class Program
{
static void Main()
{
Form form = new Form(); form.Text = "WinForm";
form.BackColor = Color.Green; form.Width = 300;
form.Height = 300;
form.MaximizeBox = false; form.Cursor = Cursors.Hand;
form.StartPosition = FormStartPosition.CenterScreen;
Application.Run(form); }
}
(20)Dùng Form, Không thừa kế
class Program
{
static void Main()
{
Form form = new Form(); form.Text = “WinForm”;
form.Click += form_Click;
Application.Run(form); }
static void form_Click(object sender, EventArgs e)
{
MessageBox.Show("Ban da click vao form"); }