1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng lập trình C trên Win potx

98 702 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 98
Dung lượng 2,78 MB

Nội dung

 Cơ chế lập trình trong Windows : Một chương trình ứng dụng người lập trình phải xây dựng, khai báo, kế thừa các tài nguyên về giao diện. Hộp hội thoại...  Tập khai báo tài nguyên :

Trang 1

Lương Văn Vân

BÀI GIẢNG LẬP TRÌNH C TRÊN WIN

Trang 3

TÀI LIỆU THAM KHẢO

1 Lập trình WinDows bằng Visual C++, Đặng Văn Đức – Lê Quốc Hưng, NXB Giáo dục, 2001.

2 Lập trình C trên Win, Đặng Văn Đức, Nhà xuất bản Khoa học kỹ thuật, 1998.

3 Bài giảng Lập trình C trên Windows.

4 www.codeproject.com, www.codeguru.com

Lập trình C trên Windows

Trang 4

TỔNG QUAN LẬP TRÌNH C TRÊN WIN

Trang 5

Chương 1: TỔNG QUAN LẬP TRÌNH C TRÊN WINDOWS

Mở đầu

Hệ điều hành Microsoft Windows Lập trình trên Microsoft Windows Cách viết một ứng dụng trên MS Windows Lập trình C trên Windows

Trang 6

Các ứng dụng của Windows rất dễ sữ dụng, nhưng rất khó đối với người tạo lập ra chúng.

Lập trình trên Windows khó và phức tạp hơn nhiều so với lập trình trên Dos.

Windows cung cấp các hàm để người lập trình thâm nhập các đặc trưng của hệ điều hành gọi là giao diện lập trình ứng dụng (API) Những hàm này đặt trong các thư viện liên kết động (.DLL).

Trang 7

1.2: HỆ ĐIỀU HÀNH MICROSOFT WINDOWS

Hệ điều hành Windows giao tiếp với người sử dụng bằng mơi trường đồ họa (graphic).

Windows là hệ thống đa nhiệm cho phép nhiều ứng dụng cùng thi hành đồng thời

Windows cho phép chạy một ứng dụng mà mã của

nó lớn hơn bộ nhớ hiện có nhờ vào cơ chế bộ nhớ ảo

Windows cung cấp cơ chế thư viện liên kết động

Hàng đợi nhập dữ liệu

Lập trình C trên Windows

Trang 8

Cơ chế lập trình trong Windows : Một chương trình ứng dụng người lập trình phải xây dựng, khai báo, kế thừa các tài nguyên về giao diện.

 Hộp hội thoại

Trang 9

1.3: LẬP TRÌNH TRÊN MICROSOFT WINDOWS

Sự khác biệt so với lập trình trên MS-Dos

Lập trình C trên Windows

Trang 10

Cơ chế thông điệp:

Trang 11

1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS

Các thành phần cơ bản tạo nên ứng dụng

Chương trình nguồn:

 Bao gồm các tập tin *.C và *.H tương tự như các chương trình trong C chuẩn cho DOS Tuy nhiên trong đó là các cấu trúc đặc thù cho Windows

 Tập tin *.H để định nghĩa các hằng số, khai báo biến, khai báo hàm,

Lập trình C trên Windows

Trang 12

Tập khai báo tài nguyên :

 Tất cả các tài nguyên được mô tả tóm tắt trong tập tin có tên phụ là

*.RC

 Tài nguyên cho một ứng thường bao gồm :

• Biểu tượng của ứng dụng (Icon)

• Con trỏ màn hình(cursor)

• Các hình ảnh (bitmap )

• Hộp hội thoại (Dialog)

• Khai báo control

Menu cho ứng dụng

Trang 13

1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS

 Tập tin khai báo các thuộc tính cho ứng dụng

 Các thuộc tính chẳng hạn như kích thước stack, kích

thước heap, được khai báo trong tập tin DEF Nếu không có chương trình ứng dụng cài đặt giá trị mặc định.

Tập tin đề án :

 Tên_Dự_án DSW (*.DSW)

Lập trình C trên Windows

Trang 14

Hàm WinMain

int WINAPI WinMain ( HINSTANCE hInstance ,

HINSTANCE hPrevInstance , LPSTR lpszCmdLine , int

nCmdShow )

hInstance chỉ danh của instance hiện hành

hPrevInstance chỉ danh của instance vừa chạy lần trước Nếu có

thì tham số khác không , nếu tham số bằng 0 thì hInstance là

instance đầu tiên của ứng dụng.

lpszCmdLine : câu lệnh gọi từ chức năng Run trong thực đơn File

của Program Manager, giống như đối số argc của hàm main() trong C chuẩn và có kiểu char far * (LPSTR).

nCmdShow : Qui định cách thức thể hiện window của ứng dụng

Trang 15

1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS

Các thành phần của hàm WinMain

Đăng ký lớp cửa sổ:

WNDCLASS wndclass; // biến để định nghĩa một cửa sổ

// Định nghĩa kiểu cửa sổ

wndclass.style = SC_HREDRAW | CS_VREDRAW;

wndclass.lpfnWndProc = WndProc; // Hàm thủ tục cửa sổ

wndclass.cbClsExtra = 0;//Giá trị mở rộng của lớp

wndclass.cbWndExtra = 0;//

Lập trình C trên Windows

Trang 16

// Định nghĩa kiểu cửa sổ (tt):

wndclass.hInstance = hInstance; // Định danh ứng dụng

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);

wndclass.hCursor = LoadCusor (NULL, IDC_ARROW);

wndclass.hbrBackground =

(HBRUSH)GetStockObject(WHITE_BRUSH);

wndclass.lpszMenuName = NULL; // Không có menu

wndclass.lpszClassName = szAppName; // tên ứng dụng

Trang 17

1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS

Lập trình C trên Windows

Trang 18

// Tạo lập cửa sổ

hwnd = CreateWindow (szAppName, // Tên cửa sổ

"Hello Program", // Tiêu đề

WS_OVERLAPPEDWINDOW, // Kiểu cửa sổ

CW_USEDEFAULT, // Tọa độ x

CW_USEDEFAULT, // Tọa độ y

CW_USEDEFAULT, // Chiều rộng

CW_USEDEFAULT, // Chiều dài

NULL, // Cửa sổ cha

NULL, // Không có menu

hInstacne, // Định danh ứng dụng

NULL); // Tham số bổ sung

Trang 19

1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS

ShowWindow (hwnd, iCmdShow);

UpdateWindow (hwnd);

Lập trình C trên Windows

Trang 20

// Chu trình xử lý các thông điệp

while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg);

DispatchMessage (&msg);

} return msg.wParam;

}

Trang 21

1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS

Hàm window (window function)

 Một ứng dụng giao tiếp với người sử dụng qua một hay nhiều

window, mỗi window trong ứng dụng được kết hợp với một window function

 Nhiệm vụ của hàm window là xử lý các message do hệ điều

hành Windows hay WinMain gởi tới

 Một ứng dụng viết trên Windows không bao giờ gọi trực tiếp

window function

LRESULT CALLBACK WndProc(HWND hWnd , UINT

Message ,WPARAM wParam , LPARAM lParam );

Lập trình C trên Windows

Trang 22

/*Xử lý các thông điệp cần thiết với ứng dụng*/

Trang 23

1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS

 Thông điệp này chỉ định rằng Windows đang trong quá trình

hủy một cửa sổ khi người sử dụng click vào nút close button

hay chọn close trong thực đơn hệ thống

 Thông điệp này được Windows gởi đến hàm window thông

qua tham số Message của hàm window

 Xử lý thông thường của thông điệp này là kết thúc chương

trình bởi vì người sử dụng huỷ bỏ cửa sổ chính Để kết thúc chương trình gọi hàm PostQuitMessage(0), hàm này gởi đi thông điệp WM_QUIT làm cho message loop kết thúc

Lập trình C trên Windows

Trang 24

Thông điệp WM_CREATE

 Hàm window nhận được thông điệp này khi Windows đang xử

lý hàm CreateWindow trong hàm WinMain, tức là lúc chương trình mới bắt đầu

 Thông điệp này gởi đến hàm window qua thông số Message

của hàm window

 Thông điệp gởi đi khi chương trình mới bắt đầu do đó việc xử

lý message là thường khởi động các giá trị ban đầu của chương trình ứng dụng

Trang 25

1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS

Thông điệp WM_PAINT

 Thông điệp WM_PAINT được phát đi khi một phần hay tất cả

vùng client (vùng làm việc của cửa sổ) bị không hợp lệ và cần cập nhật, vẽ lại

 Một vùng client không hợp lệ khi cửa sổ đầu tiên được tạo ra,

khi người sử dụng thay đổi kích thước cửa sổ, khi người sử dụng di chuyển các cửa sổ xung quanh màn hình để chúng xếp chồng lên nhau Windows không lưu các vùng cửa sổ chị che nên khi không bị che thì chúng bị bất hợp lệ

 Thông điệp này được gởi qua thông số Message của hàm

window và việc xử lý thông điệp này luôn bắt đầu bằng hàm BeginPaint, và kết thúc bằng EndPaint

Lập trình C trên Windows

Trang 26

Xây dựng một ứng dụng đầu tiên

WinMain : hàm chính của chương trình thực hiện các

chức năng :

• Khai báo lớp cửa sổ.

• Đăng ký lớp cửa sổ vừa khai báo.

• Tạo và hiển thị lớp cửa sổ trên.

• Vòng lặp nhận thông điệp.

WndProc : Hàm xử lý thông điệp gởi đến cửa sổ

Trang 27

1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS

PSTR : một con trỏ đến một chuỗi tương tự như char *

WPARAM và LPARAM , trong tham số thứ 3 của hàm

WndProc được khai báo là kiểu WORD, với kích thước 16-bit , còn tham số thứ 4 có kiểu LONG là 32-bit

LRESULT : Kiểu này đơn giản được định nghĩa như là

kiểu LONG

HANDLE: là một số nguyên 32-bit được sử dụng như

một kiểu định danh

Lập trình C trên Windows

Trang 28

Kiểu Ý nghĩa

HANDLE Số nguyên 32-bit, định danh

HWND Số nguyên 32-bit, định danh.

BYTE Giá trị 8-bit không dấu.

WORD Số nguyên 16-bit không dấu.

DWORD Số nguyên 32-bit không dấu.

UINT Số nguyên không dấu 32-bit.

LONG long 32-bit.

Trang 29

Chương 2: HỘP THOẠI VÀ THANH TRÌNH ĐƠN

Giới thiệu

Menu Hộp Thoại Lập trình C trên Windows

Trang 30

 Hộp thoại ( dialog ) và thanh trình đơn

trong việc tổ chức giao tiếp giữa người sử dụng và chương trình Hộp thoại được xem như là một loại cửa sổ đặc biệt, là công cụ mềm dẻo, linh hoạt để đưa thông tin vào chương trình một cách dễ dàng Trong khi

các thao tác đơn giản hơn, thông qua các nhóm chức năng thường sử dụng

Trang 31

2.1: MENU

Menu popup hay dropdown

 Các trạng thái của Menu :

Trang 32

MENUITEM "&[ Tên_mục_con 1.1 ]", [ Tên ID 1.1 ]

MENUITEM "&[ Tên_mục_con 1.2 ]", [ Tên ID 1.2 ]

……….

END

POPUP "&[ Tên_Mục 2 ]"

BEGIN

MENUITEM "&[ Tên_mục_con 2.1 ]", [ Tên ID 2.1 ]

MENUITEM "&[ Tên_mục_con 2.2 ]", [ Tên ID 2.2 ]

……… MENUITEM SEPARATOR

Trang 33

2.1: MENU

Cách đặt menu vào cửa sổ của chương trình

ứng dụng:

trúc lớp WNDCLASS bằng tên menu được

khai báo trong tập tin tài nguyên.

 Ví dụ:

wndclass.lpszMenuName = “Tên_Menu”;

WM_COMMAND và gởi đến chương trình khi

người dùng chọn một mục liệt kê.

Lập trình C trên Windows

Trang 34

int MessageBox ( HWND hWnd , LPCTSTR lpText ,

LPCTSTR lpCaption , UINT uType );

hWnd: Chỉ danh cửa sổ sở hữu hộp thông báo, có thể để NULL

lpText: Chuỗi thông báo

lpCaption: Tựa đề hộp thông báo

uType: Kiểm bao gồm các nút điều khiển

Trang 35

HỘP THÔNG BÁO

uType có thể là các giá trị sau:

MB_ABORTRETRYIGNORE : Hộp thông báo bao gồm các nút Abort, Retry, Ignore

MB_OK : Hộp thông báo bao gồm các nút Ok

MB_OKCANCEL : Hộp thông báo bao gồm các nút Cancel, Ok

MB_RETRYCANCEL : Hộp thông báo bao gồm các nút Retry, Cancel

MB_YESNO : Hộp thông báo bao gồm các nút Yes, No

MB_YESNOCANCEL : Hộp thông báo bao gồm các nút Yes,

No, Cancel

Lập trình C trên Windows

Trang 36

Giá trị trả về của hàm:

IDABORT : Nút Abort được chọn

IDCANCEL : Nút Cancel được chọn

IDIGNORE : Nút Ignore được chọn

IDNO : Nút No được chọn

IDOK : Nút Ok được chọn

IDRETRY : Nút Retry được chọn

IDYES : Nút Yes được chọn

Trang 37

VÍ DỤ:

Xây dựng một ứng minh họa Menu và hộp thông báo:

Lập trình C trên Windows

Trang 39

2.1: HỘP THOẠI

Các loại Hộp thoại: Có 3 loại hộp

thoại cơ bản

Hộp thoại trạng thái ( modal )

Hộp thoại không trạng thái ( modeless )

Hộp thoại thông dụng ( common dialog )

Lập trình C trên Windows

Trang 40

Cách tạo hộp thoại đơn giản

Cách 1: Tạo hộp thoại trong tập tin tài nguyên *.RC

[Định_danh] DIALOG DISCARDABLE X,Y ,W,H

STYLE [ Hằng hiển thị kiểu hộp thoại]

FONT <size>, “Font name"

BEGIN

LOẠI ĐIỀU KHIỂU <“Nhãn”>,[ID], X,Y ,W,H ………

Trang 41

Hộp thoại trạng thái (

Hộp thoại trạng thái (modal modal )

Ví dụ: Tạo ra hộp thoại sauLập trình C trên Windows

Trang 42

Viết code như sau:

DIALOG1 DIALOG DISCARDABLE 40, 20, 164, 90

STYLE DS_MODALFRAME | WS_POPUP

FONT 9, "MS Sans Serif"

BEGIN

DEFPUSHBUTTON "OK",IDOK,54,65,50,14CTEXT "HELLO WORLD ",IDC_STATIC,53,38,72,10ICON IDI_ICON1,IDC_STATIC,68,9,21,20

Trang 44

Kích hoạt một hộp hội thoại:

Int DialogBox(HINSTANCE hThisInst, LPCSTR lpszName,

HWND hWnd, DLGPROC lpDFunc);

hThisInst : là chỉ danh thể hiện hiện thời

lpszName: Tên hộp hội thoại được xác định trong tập tin tài nguyên

hWnd :Chỉ danh của cửa sổ cha chứaDialog

lpDFunc: Con trỏ trỏ đến hàm xử lý message cho hộp hội thoại

Trang 45

Hộp thoại trạng thái (

Hộp thoại trạng thái (modal modal )

Thủ tục xử lý thông điệp của hộp thoại:

UINT Message , WPARAM wParam , LPARAM lParam )

DialogProc không cần xử lý thông điệp WM_DESTROY, WM_PAINT và WM_CREATE

Thông điệp WM_INITDIALOG dùng để khởi tạo.

Thông điệp WM_COMMAND: gởi đến cửa sổ cha khi ta

kích hoạt (trong word thấp của đối số wParam)

Lập trình C trên Windows

Trang 46

Tắt hộp hội thoại:

 Để tắt hộp hội thoại modal dùng hàm EndDialog() như sau:

BOOL EndDialog (HWND hDlg, int Status);

hWnd : là chỉ danh hộp hội thoại

Status: Mã trạng thái do hàm DialogBox trả về Giá trị này có

thể bỏ qua.

Hàm trả về giá trị nonzero nếu thành công ngược lại zero

Trang 47

Chương 3: CÁC ĐỐI TƯỢNG ĐIỀU KHIỂNLập trình C trên Windows

Trang 48

Nút nhấn (Push button)

PUSHBUTTON “Nhãn", IDC_RED , X,Y , W, H

xử lý hộp hội thoại.

Trang 49

Các loại điều khiển

Nuùt CheckBox

CHECKBOX “String” , CBID , X, Y, W, H

String : là văn bản trình bày dọc theo

W, H : Chiều rộng, cao hộp chức văn bản

Lập trình C trên Windows

Trang 50

 Hoạt động của checkbox

LONG SendDlgItemMessage( HWND hWnd, int ID, UINT

IDMsg, WPARAM wParam, LPARAM lParam);

Message BM_SETCHECK: Được gởi đến checkbox để xác lập trạng thái chọn hay không chọn.

Message BM_GETCHECK: Được gởi đến checkbox để lấy các thông tin chọn hay không chọn.

Giá trị BST_CHECKED: Hộp kiểm được chọn.

Giá trị BST_UNCHECKED: Hộp kiểm không được chọn.

Trang 51

Các loại điều khiển

Trang 52

Điều khiển tĩnh

LTEXT “string”, ID,X, Y, W, H //Chuỗi được canh trái

RTEXT “string”, ID,X, Y, W, H // Chuỗi được canh phải

CTEXT “string”, ID,X, Y, W, H // Chuỗi được canh giữa

String: là chuỗi được hiển.

ID: chỉ danh của điều khiển

X,Y: Tọa độ bắt đầu chuỗi

W, H: Chiều rộng, cao của chuỗi

Trang 53

Các loại điều khiển

Điều khiển Radio

 Giống như điều khiển checkbox như lựa chọn có loại trừ

AUTORADIOBUTTON “String”, ID, X, Y, W, H

 Hàm SendDlgItemMessage() gởi thông điệp BM_GET_CHECK

Nếu wParam là BST_CHECHED ,nút này sẽ được chọn,

Nếu là BST_UNCHECHED hộp sẽ được xóa

Lập trình C trên Windows

Trang 54

Hộp nhập văn bản (EDITTEXT)

 Khai báo trong tập tin RC

EDITTEXT ID , X,Y, W,H

 Cách lấy dữ liệu từ hộp nhập dữ liệu

UINT GetDlgItemText ( HWND hWnd, int ID, LPSTR lpstr, int Max)

hWnd: chỉ danh hộp hội thoại

ID: chỉ danh EditText

lpstr: Con trỏ chuổi văn bản

Max: số ký tự tối đa cần lấy

Trang 55

Các loại điều khiển

 Cách đưa dữ liệu lên hộp nhập dữ liệu

UINT SetDlgItemText ( HWND hWnd, int ID , LPSTR lpstr )

hWnd: chỉ danh hộp hội thoại

ID: chỉ danh EditText

lpstr: Con trỏ chuổi văn bản

Lập trình C trên Windows

Trang 56

Hộp danh sách(LISTBOX)

 Khai báo trong tập tin RC

LISTBOX ID, X, Y, W, H, style

 Đưa danh sách mục chọn vào listbox thông qua message WM_INIDIALOG của hộp hội thoại vì message này được phát đi khi hộp hội thoại khởi động.

Trang 57

Các loại điều khiển

 Để thêm một mục chọn vào listbox cần gởi message

LB_ADDSTRING đến listbox bằng hàm

SendDlgItemMessage()

LONG SendDlgItemMessage (HWND hDlg, int ID, UINT IDMsg, WPARAM wParm, LPARAM lParam)

• hWnd: cửa sổ dialog

• ID: chỉ danh listbox

• IDMsg : Message cần gởi

• WParam =0

• LParam: chuỗi cần gởi đến

Lập trình C trên Windows

Trang 58

Ví dụ

SendDlgItemMessage(hWnd, LBID, LB_ADDSTRING, 0, “Apple”);

Trang 59

Các loại điều khiển

Các thao tác

LB_INSERTSTRING : chèn một chuỗi vào vị trí bất kỳ

 Cú pháp:

SendDlgItemMessage(hwndList, LB_INSERTSTRING,

iIndex , (LPARAM) szString);

iIndex là vị trí muốn chèn chuỗi vào

 Nếu giá trị này bằng -1 thì chuỗi được chèn vào đáy của list box

Lập trình C trên Windows

Trang 60

LB_DELETESTRING : Xóa một chuỗi trong list box

 Cú pháp:

SendDlgItemMessage(hwndList, LB_DELETESTRING,

iIndex, 0);

iIndex là vị trí muốn xóa chuỗi vào

LB_RESETCONTENT: Xóa hết các phần tử nằm trong list box

Trang 61

Các loại điều khiển

LB_GETCOUNT : đếm số mục trong List box

Cú pháp:

SendDlgItemMessage(hwndList, LB_GETCOUNT, 0 , 0);

LB_GETTEXT: Để chép chuỗi trên mục ListBox vào vùng đệp (chuỗi)

Ngày đăng: 19/06/2014, 08:20

TỪ KHÓA LIÊN QUAN

w