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

Báo cáo bài tập lớn môn hệ điều hành tìm hiểu lập trình API trong window

13 12 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

Tiêu đề Báo cáo bài tập lớn môn hệ điều hành: Tìm hiểu lập trình API trong Windows
Tác giả Nhóm sinh viên Thực Hiện: Nguyễn Tuấn Anh, Trần Quốc Huy, Chu Gia Khôi, Vũ Hồng Quân, Hoàng Thanh Tùng
Người hướng dẫn PTS. Nguyễn Văn A
Trường học Học viện Công Nghệ Bách Khoa Hà Nội
Chuyên ngành Hệ điều hành và Phát triển phần mềm
Thể loại Báo cáo bài tập lớn
Năm xuất bản 2008
Thành phố Hà Nội
Định dạng
Số trang 13
Dung lượng 1,07 MB
File đính kèm Báo cáo bài tập.rar (1 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

ĐẠI HỌC BÁCH KHOA HÀ NỘI Khoa Công Nghệ Thông Tin BÁO CÁO BÀI TẬP LỚN MÔN HỆ ĐIỀU HÀNH Đề tài Tìm hiểu lập trình API trong windows Giáo viên hướng dẫn Nhóm sinh viên thực hiện Nguyễn Tuấn Anh Trần Quốc Huy 20080075 20081166 Chu Gia Khôi 20081409 Vũ Hồng Quân 20082128 Hoàng Thanh Tùng 20082997 1 Mục lục Mục lục 2 MỞ ĐẦU 2 II, SƠ BỘ WINDOW API, CÁCH THỨC LÀM VIỆC 4 Các thư viện lập trình của Windows SDK – Software Development Kit 4 Các khái niệm cơ bản 4 Các thành phần giao diện đồ họa (GUI – Grap.

Trang 1

KhoaCôngNghệThôngTin

BÁOCÁOBÀITẬPLỚNMÔNHỆĐ

IỀUHÀNH

Giáoviênhướngdẫn:

Nhómsinhviênthựchiện:

NguyễnTuấnAnh

TrầnQuốcHuy 20080075 20081166

ChuGiaKhôi 20081409

VũHồngQuân 20082128

HoàngThanh Tùng 20082997

1

Trang 2

Mụclục

Mục lục .2

I.

MỞ ĐẦU 2 II,

SƠ BỘ WINDOW API, CÁCHTHỨC LÀM VIỆC 4

1.

Các thưviện lập trình củaWindows SDK – Software Development Kit 4 2.

Các khái niệm cơ bản .4 3.

Các thànhphầngiao diệnđồ họa (GUI – Graphics UserInterface) .5 4.

Qui trình hoạtđộngcủachương trình ứng dụng .6 5.

Ví dụ 6

III,

MỘTSỐTHÀNH PHẦN CƠBẢN 12

1.

Tài nguyêncủaứng dụng (Resources) 12

2.

Một số kiểu dữ liệumới .13

3.

Một số hàmđồhọa cơ sở: 15

4.

HỘP THOẠI VÀ ĐIỀU KHIỂN .17

IV.Kết luận 21

I.MỞĐẦU:

Trang 3

Cácứng dụng của Windows rất dễsửdụng, nhưng rất khó đối vớingườiđãtạo lập ra chúng.Đểđạtđược tính dễdùngđòi hỏi người lập trìnhphảibỏrarấtnhiềucôngsứcđểcàiđặt

Lập trình trên Windows khóvàphức tạp hơn nhiều so với lập trìnhtrênDOS.TuynhiênlậptrìnhtrênWindowssẽgiảiquyếtđượcmộtsốvấn đềkhók h ănt r o n g m ôit r ườngD O S n h ưxâyd ựngg i a o d i ệnn g ườid ùng, quảnlýbộnhớảo,độclậpthiếtbịvàora,thâmnhậpInternet,khảnăngchiasẻtàin guyên,

Windowsc u n g c ấpc ách àmđ ểngườil ậpt r ìnht h âmn h ậpc ácđ ặc trưngc ủah ệ điềuhànhgọilàgiaodiệnlậptrình ứngdụng(Application Programming Interface – API) Những hàm nàyđượcđặt trong các thưviệnliên kếtđộng (Dynamic Link Library – DLL) Các chương trìnhứng dụng sửdụng chúng thông qua các lời gọi hàm vàchỉchia sẻđược khi trong máy cócàiđặtWindows

Trang 4

1 CácthưviệnlậptrìnhcủaWindowsSDK–SoftwareDevelopmentKit:

- LàbộthưviệnlậptrìnhnềntảngcủaHĐHWindows

- Cung cấp tất cảcác công cụcần thiếtđểxây dựng 1ứng dụng trênWindows

- Được sửdụng nhưlàthưviện cơsởđểtạo ra những thưviện caocấp hơn trong những ngôn ngữlập trình VD: OWL của BorlandC, MFC củaVisualC++,…

- MộtsốthànhphầncơbảncủaSDK:

• Win32API

• GDI/GDI+

• WindowsMultimedia

• OpenGL

• DirectX

• COM/COM+

• ADO(ActiveXDataObject)

• OLEDB

• …

2 Các khái ni ệ m c ơ b ả n:

Message:Traođổithôngtingiữachươngtrìnhứngdụngvàhệđiềuhành ThủtụcWindow:ĐượcgọibởihệthốngđểxửlýcácMessagenhậnđược.

HàngđợiMessage:Mỗichươngtrìnhcó1hàngđợiMessageđểchứacácMe

ssage.MỗichươngtrìnhcóvònglặpMessage

Handle:Mộtgiátrị32bitskhôngdấu(unsigned)doHĐHtạorađểlàm

địnhdanhchomộtđốitượng(cửasổ,file,vùngnhớ,menu,…)

ID( I d e n t i f i e r ) :M ộtg i át

danhcho1đốitượng(menuitem,control)

Trang 5

ựcthicủaứngdụng

Callback:Thuộctínhcủa1hàm/

thủtụcsẽđượcgọibởiHĐH,khôngphảibởiứngdụng

3 Các thành ph ầ n giaodi ệ n đ ồ h ọ a (GUI– Graphics User Interface)

CácdạngGUIcơbản:

- SDI–SingleDocumentInterface:

+Mộtcửasổlàmviệc

+Chophépthayđổikíchthướccửasổ(Resizeable)

+Khôngcócáccửasổcon

+Vídụ:NotePad,Paint,…

- MDI–MultiDocumentInterface:

+Mộtcửasổlàmviệc chính(Frame

window)vànhiềucửasổcon(Childwindow)

+Chophépthayđổikíchthướccửasổ(Resizeable)

+ChophépMaximize/Minimize/Closecáccửasổcon

+Vídụ:Word,Excel,VC++,…

-Dialog:

+Mộtcửasổlàmviệc

+Thườngcókíchthướccốđịnh

+Thườngkhôngcómenubar

+Thườngcócácbutton,edit box,listbox,…

+Vídụ:Calculator,CDPlayer,…

-Cửasổ:

-Địnhnghĩa:

+Là1vùngchữnhậttrênmànhình

+Dùngđểhiểnthịkếtquảoutput

+Vànhậncácinput từngười dùng

- Côngv i ệcđ ầut i ênc ủa1 vi

ệc ứngd ụngG U I l àt ạo1 c ửas ổ làm

Trang 6

- Nguyêntắcquảnlý:

+Môhìnhphâncấp:mỗicửasổđềucó1cửasổcha(parentwindow),ngo ạitrừcửasổnềnDesktop

+Tạimỗithờiđiểm,chỉcó1cửasổnhậninputtừuser(Active/

Focusedwindow)

- Phânloại:

+CửasổDesktop

+Cửasổtiêuchuẩn

+Cửasổhộpthoại(Dialogbox)

+Các control

4 Qui trình ho ạ t đ ộ ng c ủ a ch ươ ng trình ứ ng d ụ ng :

- Cửasổđượchiểnthịlênmànhình

- Chờcửasổgửithôngđiệp

- CácthôngđiệpđượcWindowsgửitrảlạichươngtrìnhứngdụngthôngqualời gọihàmcủachúngtrongchươngtrìnhứngdụng

- Khinhậnđượcthôngđiệp,chươngtrìnhứngdụnggọicáchàmAPIvàhàmc ủariêngchúngđểthựchiệncôngviệcmongmuốn

- Lập trình trên Windows làlập trình trên cơsởthôngđiệp, quátrình traođổi thông tin và điều khiển dựa trên thôngđiệp Córất nhiều thôngđiệpđượcphátsinhngẩunhiênnhưnhấnphímhaychuột,chọnmenu,

- Tương tác củaứng dụng với người sửdụng thông qua một hay nhiềucửasổ,tạolậpcáccửa sổkhi cần thiếtvàquảnlýthôngtintrongđó

5 Ví d ụ

#include<windows.h>

LRESULTCALLBACKXulyMessage(HWND,UNIT,WPARAM,LPARAM);

charszAppName[]=“Vidu”;

intWINAPIWinMain(HANDLEhInst,HANDLEhPrevInst,

LPSTRlpszCmdLine,intnCmdShow) {

HWNDhwnd;MSGmsg;WNDCLAS

SEXwndclass;wndclass.cbSize=siz

eof(wndclass);

wndclass.style=CS_HREDRAW|CS_VREDRAW;

Trang 7

wndclass.cbClsExtra= 0;

wndclass.cbWndExtra =

0;wndclass.hInstance=hInst

;

wndclass.hIcon = LoadIcon (NULL,

IDI_APPLICATION);wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);wndclass.hbrBackground=GetStockObject(WH ITE_BRUSH);wndclass.lpszMenuName=NULL;

wndclass.lpszClassName=szAppName;

wndclass.hIconSm=LoadIcon(NULL,IDI_APPLICATION);R

egisterClassEx(&wndclass);

hwnd= C r e a t e W i n d o w ( s z A p p

N a m e , “Vidumodau”,

WS_OVERLAPPEDWINDOW,CW_USE

DEFAULT,

CW_USEDEFAULT,CW_USEDEFAULT,

CW_USEDEFAULT,HWND_DESKTOP,

NULL,

hInst,N

ULL);

ShowWindow(hwnd, n CmdS how )

;UpdateWindow (hwnd);

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

{

TranslateMessage(&msg);DispatchMes

sage(&msg);

}

returnmsg.wParam;

}

LRESULTC A L L B A C K X u l y M e s s a g e ( H W N D hwn d, UI NTi Ms g,

WPARAMwParam,LPARAMlParam) {

HDChdc;PAINTS

TRUCTps;

RECTrect;switc

h(iMsg)

{

caseWM_PAINT:

hdc=BeginPaint(hwnd,&ps);Ge

tClientRect(hwnd,&rect);

DrawText(hdc,“LaptrinhCforWin”,1,&rect,

DT_SINGLELINE| D T _ C E N T E R |

D T _ V C E N T E R ) ;

Trang 8

EndPaint(hwnd,&ps);b reak;

Trang 9

PostQuitMessage(0);break;

default:

returnDefWindowProc(hwnd,iMsg,wParam,lParam);

}

return0;

}

Tasẽkhảosátvídụtrênđểnắmđượcnguyênlýhoạtđộngcủachúng.Trênđâylàđoạ nchươngtrìnhđơngiảntrênWindows,chươngtrìnhchỉhiểnthị1khung cửa sổvà1 dòng chữnhưng córất nhiều lệnh màcúpháp rất

khónhớ.Dovậy,nguyêntắclậptrìnhtrênWindowschủyếulàsaochépvàchỉnhsử anhữngnơicầnthiếtdựavàomộtchươngtrìnhmẫucósẵn

a Hàm WinMain()được thực hiệnđầu tiên hay còn gọi là điểm vào củachươngtrình

Tathấyhàmnàycó4thamsố:

+hInst, hPrevinst: Chỉsốchương trình khi chúngđang chạy VìWindows làhệđiều hànhđa nhiệm, cóthểcónhiều bản củacùng một chương trình cùng chạy vào cùng một thờiđiểm nênphải quản lýchặt chẽchúng hInst làchỉsốbản chương trìnhvừa khởiđộng, hPrevinst làchỉsốcủa bảnđã được khởiđộngtrướcđóvàchúngluôncógiátrịNULL

+lpszCmdLine: chứađịa chỉđầu của xâu kýtựcácđối sốdònglệnh +n C m d S h o w : Chobiếtcáchthứchiểnthịcửasổkhichươngtrình khởiđộng.Windowscóthể gángiátrị SW_SHOWNORMAL hayS W _ S H O W M I N N O A C T I V E

Cácthamsốtrêndohệđiềuhànhtruyềnvào

ĐịnhnghĩalớpcửasổvàđăngkývớiWindows

+L ớpc ửas ổ(window c l a s s ) : L àm ộtt ậpc áct h u ộct ínhm àH ĐH Windowssửdụnglàmkhuônmẫu(template)khitạolậpcửasổ.Mỗilớpcửas ổđượcđặctrưngbằng1tên(classname)dạngchuỗi

Phânloạiclass:

- Lớpcửasổcủahệthống(Systemclass):Đượcđịnhnghĩ atrướcbởiHĐHWindows.Cácứngdụngkhôngthểhủybỏ

Trang 10

- Lớpcửasổdoứngdụngđịnhnghĩa:Đượcđăngkýbởi ứngdụng.Cóthểhủybỏkhikhôngcònsửdụngnữa

- Lớptoàncụccủaứngdụng(Applicationglobalclass)

- Lớpcụcbộcủaứng dụng(Applicationlocalclass)

Mỗicửasổđềuthuộcmộtlớpxácđịnh

Khilầnđầuchạy,ứngdụngphảiđịnhnghĩavàđăngkýlớpvớicửasổ(Wi ndow Class).Đây làcấu trúc dữliệu môtảtính chất của cửa sổ, lầnlượt ta gán các giátrịbanđầu cho các thành phần của cấu trúc lớp cửa sổ,bao gồm: Kích thước, kiểu,địa chỉhàm xửlýthôngđiệp cửa sổ,định nghĩahìnhdạngchocontrỏchuột(cursor)vàbiểutượng(Icon),màunền,tênlớpc ửasổ

struct

WNDCLASSEX{UINT cbSize;

UINTstyle;

WNDPROClpfnWndProc;i

nt cbClsExtra;

int

cbWndExtra;HINSTANC

E

hInstance;HICONhIcon;

HCURSORhCursor;HBR

USHhbrBackground;

LPCTSTRlpszMenuName;

LPCTSTRl p s z C l a s s N a

m e ;

};

+Saukhiđãđịnhnghĩacácthànhphầnlớpcửasổtaphảiđăngkýlớpcửa sổvớihệđiềuhành(RegisterClassEX)

ATOMR e g i s t e r C l a s s E x ( C O N S T W N D C L A S S E X * l

p W C l a s s ) ; với:KiểugiátrịcủaATOMđượcđịnhnghĩatrongwi

ndow.hlàWORD;lpWClasslàcontrỏđếncấutrúclớpcửasổ;hàm nàytrảvềchỉsốcủalớpcửasổ

+Cóhainguyênnhândẫnđếnviệcđăngkýcửasổthấtbại:

- Trùngtêngiữacácứngdụngtronghệđiềuhành

- Khôngđủbộnhớ

+Tạolậpc ửasổlàmviệc(FrameWindow)

- SaukhiđăngkýthànhcôngtacóthểtạolậpcửasổthôngquahàmCre

ateWindow().HWNDCreateWindow(

LPCSTR lpClassName,LPCST

Trang 11

RlpWinName,DWOR DdwStyle,

intX,intY,

Trang 12

intWidth,intHeight, HWNDhParent,HME NUhMenu,HINSTAN CEhInst,

LPVOIDlpszAdditional);

- Gọi hàm

ShowWindow()đểShowWindow(HWNDhw

nd,intnShow);

hiển thị cửa sổ BOOL

với:hwndchỉsốcửasổcầnhiểnthị

nShow cách thức hiển thịcủa cửa sổ, tham sốnàyđược nhậngiátrịlầnđầutiêncủahàmWinMain()

- Đểthông báo choứng dụng biết làphải vẽlại vùng làm việccủacửasổ,taphảigọihàmUpdateWindow()yêucầuWindowsg ửithôngđiệpđếnhàmxửlýthôngđiệpcửasổ

+Vònglặpthôngđiệp

-K h i n h ấnp h ímh a y c h u ột,W i n d o w s c h u y ểnđ ổis ựki ệnn ày thànhcácthôngđiệpvàđặtvàohàngđợithôngđiệp.Vònglặp

thôngđ iệpc ónhiệmv ụh

àngđợi nhậnv àxử lýcácthôngđiệptrong

- TranslateMessage:Dịchthôngđiệpsangdạngtiêuchuẩn

- DispatchMessage:P h ânp h ốit h ôngđ iệpđ ếnh àmx ửđi

ệptươngứng

b Thủtụcxửlýthôngđiệp

+Nhậnvàxửlýthôngđiệpcủa chương trình

+Mộtchươngtrìnhcóthểcónhiềuthủtụcwindow

+Mộtlớp cửasổsẽkhaibáo1 thủtụcwindow

+Cácthôngđiệpsau khixửlýnêntrảvềgiátrị0

+Dạngtổngquát:

lýthông

LRESULTCALLBACKWndProc(

HWNDhWnd,//

handlecủawindownhậnmessageUINTmessage,//

IDcủathôngđiệp(tênthôngđiệp)

WPARAMwParam,//

thamsốthứnhấtcủamessage(WORD)LPARAMlParam)//

thamsốthứhaicủamessage(LONG)

{

switch(message)

{

Trang 13

caseWM_COMMAND: return0;

caseWM_PAINT:re turn0;

Ngày đăng: 22/05/2022, 16:24

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w