Báo Cáo Sơ Bộ - Lập Trình API

Embed Size (px)

Citation preview

  • 8/6/2019 Bo Co S B - Lp Trnh API

    1/20

    I HC BCH KHOA H NI

    Khoa Cng Ngh Thng Tin

    BO CO BI TP LN MN

    H IU HNH

    ti : Tm hiu lp trnh API trong window

    Gio vin hng dn :

    Nhm sinh vin thc hin :

    Nguyn Tun Anh 20080075Trn Quc Huy 20081166 Chu Gia Khi 20081409V Hng Qun 20082128

    Hong Thanh Tng 20082997

    1

  • 8/6/2019 Bo Co S B - Lp Trnh API

    2/20

    Mc lc

    Mc lc ............................................................................................................... 2I.M U:..........................................................................................................3II, S B WINDOW API, CCH THC LM VIC ..........................................4

    1. Cc th vin lp trnh ca Windows SDK Software Development Kit:..............4

    2. Cc khi nim c bn:.........................................................................................4

    3. Cc thnh phn giao din ha (GUI Graphics User Interface) ...................5

    4. Qui trnh hot ng ca chng trnh ng dng: ..............................................6

    5. V d ....................................................................................................................6III, MT S THNH PHN C BN .............................................................. 121. Ti nguyn ca ng dng (Resources) ...................................................... 12

    2. Mt s kiu d liu mi:....................................................................................13

    3. Mt s hm ha c s:.................................................................................14

    3.1 Nhm hm v .............................................................................................14

    3.2 Nhm hm min .........................................................................................15

    4.HP THOI V IU KHIN .............................................................................16

    4.1 Hp thoi ....................................................................................................164.2Thit k hp thai.........................................................................................16

    4.3Cc kiu iu khin ......................................................................................17

    4.4 Th tc x l hp thai ...............................................................................18

    4.5 Hp thoi trng thi ...................................................................................18

    4.6 Hp thoi khng trng thi ........................................................................19

    IV.Kt lun ........................................................................................................ 20

    2

  • 8/6/2019 Bo Co S B - Lp Trnh API

    3/20

    I.M U:

    Cc ng dng ca Windows rt d s dng, nhng rt kh i vi ngi to lp ra chng. t c tnh d dng i hi ngi lp trnh phi b rart nhiu cng sc ci t.

    Lp trnh trn Windows kh v phc tp hn nhiu so vi lp trnh trnDOS. Tuy nhin lp trnh trn Windows s gii quyt c mt s vn khkhn trong mi trng DOS nh xy dng giao din ngi dng, qun l b

    nh o, c lp thit b vo ra, thm nhp Internet, kh nng chia s ti nguyn,...

    Windows cung cp cc hm ngi lp trnh thm nhp cc c trngca h iu hnh gi l giao din lp trnh ng dng (Application ProgrammingInterface API). Nhng hm ny c t trong cc th vin lin kt ng(Dynamic Link Library DLL). Cc chng trnh ng dng s dng chngthng qua cc li gi hm v ch chia s c khi trong my c ci tWindows.

    3

  • 8/6/2019 Bo Co S B - Lp Trnh API

    4/20

    II, S B WINDOW API, CCH THC LM VIC

    1. Cc th vin lp trnh ca Windows SDK Software Development Kit:

    - L b th vin lp trnh nn tng ca HH Windows.- Cung cp tt c cc cng c cn thit xy dng 1 ng dng trn

    Windows.- c s dng nh l th vin c s to ra nhng th vin cao cp

    hn trong nhng ngn ng lp trnh. VD: OWL ca BorlandC, MFC caVisual C++,

    - Mt s thnh phn c bn ca SDK: Win32 API. GDI/GDI+. Windows Multimedia. OpenGL. DirectX. COM/COM+. ADO (ActiveX Data Object). OLE DB.

    2. Cc khi nim c bn:

    Message: Trao i thng tin gia chng trnh ng dng v h iuhnh.

    Th tc Window: c gi bi h thng x l cc Message nhn

    c.

    Hng i Message: Mi chng trnh c 1 hng i Message chacc Message. Mi chng trnh c vng lp Message.

    Handle: Mt gi tr 32 bits khng du (unsigned) do HH to ra lmnh danh cho mt i tng (ca s, file, vng nh, menu,).

    ID (Identifier): Mt gi tr nguyn do ng dng to ra lm nh danhcho 1 i tng (menu item, control).

    4

  • 8/6/2019 Bo Co S B - Lp Trnh API

    5/20

    Instance: Mt gi tr nguyn do HH to ra nh danh 1 th hinang thc thi ca ng dng.

    Callback: Thuc tnh ca 1 hm/ th tc s c gi bi HH, khngphi bi ng dng.

    3. Cc thnh phn giao din ha (GUI Graphics User Interface)Cc dng GUI c bn:

    - SDI Single Document Interface:+ Mt ca s lm vic.+ Cho php thay i kch thc ca s (Resizeable).+ Khng c cc ca s con.+ V d: NotePad, Paint,

    - MDI Multi Document Interface:+ Mt ca s lm vic chnh (Frame window) v nhiu ca s con

    (Child window).+ Cho php thay i kch thc ca s (Resizeable).+ Cho php Maximize/Minimize/Close cc ca s con.+ V d: Word, Excel, VC++,

    - Dialog:+ Mt ca s lm vic.+ Thng c kch thc c nh.+ Thng khng c menu bar.+ Thng c cc button, edit box, list-box,

    + V d: Calculator, CD Player,

    - Ca s:- nh ngha:

    + L 1 vng ch nht trn mn hnh.+ Dng hin th kt qu output.+ V nhn cc input t ngi dng

    - Cng vic u tin ca 1 ng dng GUI l to 1 ca s lm vic.- Nguyn tc qun l:

    + M hnh phn cp: mi ca s u c 1 ca s cha (parentwindow), ngoi tr ca s nn Desktop.

    5

  • 8/6/2019 Bo Co S B - Lp Trnh API

    6/20

    + Ti mi thi im, ch c 1 ca s nhn input t user(Active/Focused window).

    - Phn loi:+ Ca s Desktop.+ Ca s tiu chun.+ Ca s hp thoi (Dialog box).+ Cc control.

    4. Qui trnh hot ng ca chng trnh ng dng:

    - Ca s c hin th ln mn hnh.

    - Ch ca s gi thng ip.- Cc thng ip c Windows gi tr li chng trnh ng dng thng

    qua li gi hm ca chng trong chng trnh ng dng.- Khi nhn c thng ip, chng trnh ng dng gi cc hm API v

    hm ca ring chng thc hin cng vic mong mun.

    - Lp trnh trn Windows l lp trnh trn c s thng ip, qu trnh traoi thng tin v iu khin da trn thng ip. C rt nhiu thng ip c

    pht sinh ngu nhin nh nhn phm hay chut, chn menu, ...

    - Tng tc ca ng dng vi ngi s dng thng qua mt hay nhiu cas, to lp cc ca s khi cn thit v qun l thng tin trong .

    5. V d

    #include LRESULT CALLBACK XulyMessage (HWND,UNIT,WPARAM,LPARAM);

    char szAppName [ ] = Vidu;int WINAPI WinMain (HANDLE hInst, HANDLE hPrevInst,

    LPSTR lpszCmdLine, int nCmdShow){

    HWND hwnd; MSG msg;WNDCLASSEX wndclass;wndclass.cbSize = sizeof(wndclass);wndclass.style = CS_HREDRAW | CS_VREDRAW;wndclass.lpfnWndProc = XulyMessage;wndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.hInstance = hInst;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);

    6

  • 8/6/2019 Bo Co S B - Lp Trnh API

    7/20

    wndclass.hbrBackground = GetStockObject (WHITE_BRUSH);wndclass.lpszMenuName = NULL;wndclass.lpszClassName = szAppName;wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

    RegisterClassEx(&wndclass);hwnd = CreateWindow(szAppName,

    Vi du mo dau,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,

    HWND_DESKTOP,NULL,hInst,

    NULL);ShowWindow (hwnd, nCmdShow);UpdateWindow (hwnd);while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg);

    DispatchMessage (&msg);}

    return msg.wParam;}LRESULT CALLBACK XulyMessage (HWND hwnd, UINT iMsg,

    WPARAM wParam, LPARAM lParam){HDC hdc;PAINTSTRUCT ps;RECT rect;switch (iMsg){case WM_PAINT:

    hdc = BeginPaint (hwnd, &ps);GetClientRect (hwnd, &rect);

    DrawText (hdc, Lap trinh C for Win, -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);EndPaint (hwnd, &ps);break;case WM_DESTROY:

    PostQuitMessage(0);break;default:return DefWindowProc (hwnd, iMsg, wParam, lParam);

    }

    return 0;}

    7

  • 8/6/2019 Bo Co S B - Lp Trnh API

    8/20

    Ta s kho st v d trn nm c nguyn l hot ng ca chng. Trny l on chng trnh n gin trn Windows, chng trnh ch hin th 1khung ca s v 1 dng ch nhng c rt nhiu lnh m c php rt kh nh.Do vy, nguyn tc lp trnh trn Windows ch yu l sao chp v chnh sanhng ni cn thit da vo mt chng trnh mu c sn.

    a. Hm WinMain() c thc hin u tin hay cn gi l im vo cachng trnh.

    Ta thy hm ny c 4 tham s:+ hInst, hPrevinst: Ch s chng trnh khi chng ang chy. V

    Windows l h iu hnh a nhim, c th c nhiu bn ca cngmt chng trnh cng chy vo cng mt thi im nn phiqun l cht ch chng. hInst l ch s bn chng trnh va khing, hPrevinst l ch s ca bn c khi ng trc vchng lun c gi tr NULL.

    + lpszCmdLine: cha a ch u ca xu k t cc i s dnglnh.

    + nCmdShow: Cho bit cch thc hin th ca s khi chng trnhkhi ng. Windows c th gn gi tr SW_SHOWNORMALhay SW_SHOWMINNOACTIVE.

    Cc tham s trn do h iu hnh truyn vo.

    nh ngha lp ca s v ng k vi Windows+ Lp ca s (window class): L mt tp cc thuc tnh m HH

    Windows s dng lm khun mu (template) khi to lp ca s. Mi lp ca sc c trng bng 1 tn (class-name) dng chui.

    Phn loi class:- Lp ca s ca h thng (System class): c nhngha

    trc bi HH Windows. Cc ng dng khng th hy b.

    - Lp ca s do ng dng nh ngha: c ng k bing dng. C th hy b khi khng cn s dng na.- Lp ton cc ca ng dng (Application global class).- Lp cc b ca ng dng (Application local class).

    Mi ca s u thuc mt lp xc nh.

    Khi ln u chy, ng dng phi nh ngha v ng k lp vi ca s(Window Class). y l cu trc d liu m t tnh cht ca ca s, ln lt tagn cc gi tr ban u cho cc thnh phn ca cu trc lp ca s, bao gm:Kch thc, kiu, a ch hm x l thng ip ca s, nh ngha hnh dng

    cho con tr chut (cursor) v biu tng (Icon), mu nn, tn lp ca s.struct WNDCLASSEX {

    8

  • 8/6/2019 Bo Co S B - Lp Trnh API

    9/20

    UINT cbSize;UINT style;WNDPROC lpfnWndProc;

    int cbClsExtra;int cbWndExtra;

    HINSTANCE hInstance;HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;LPCTSTR lpszMenuName;LPCTSTR lpszClassName;

    };

    + Sau khi nh ngha cc thnh phn lp ca s ta phi ng klp ca s vi h iu hnh (RegisterClassEX).

    ATOM RegisterClassEx (CONST WNDCLASSEX *lpWClass);vi: Kiu gi tr ca ATOM c nh ngha trong window.h lWORD; lpWClass l con tr n cu trc lp ca s; hm ny trv ch s ca lp ca s.

    +C hai nguyn nhn dn n vic ng k ca s tht bi:- Trng tn gia cc ng dng trong h iu hnh.- Khng b nh.

    + To lp ca s lm vic (Frame Window)

    - Sau khi ng k thnh cng ta c th to lp ca s thng quahm CreateWindow().HWND CreateWindow (

    LPCSTR lpClassName,LPCSTR lpWinName,DWORD dwStyle,int X, int Y,int Width, int Height,

    HWND hParent,HMENU hMenu,HINSTANCE hInst,LPVOID lpszAdditional);

    - Gi hm ShowWindow() hin th ca s BOOLShowWindow (HWND hwnd, int nShow);

    vi: hwnd ch s ca s cn hin th.nShow cch thc hin th ca ca s, tham s ny c nhn gitr ln u tin ca hm WinMain()

    - thng bo cho ng dng bit l phi v li vng lm vic caca s, ta phi gi hm UpdateWindow() yu cu Windows githng ip n hm x l thng ip ca s.

    9

  • 8/6/2019 Bo Co S B - Lp Trnh API

    10/20

    + Vng lp thng ip- Khi nhn phm hay chut, Windows chuyn i s kin ny thnh

    cc thng ip v t vo hng i thng ip. Vng lp thngip c nhim v nhn v x l cc thng ip trong hng i.

    - TranslateMessage: Dch thng ip sang dng tiu chun.- DispatchMessage: Phn phi thng ip n hm x l thng ip

    tng ng.

    b. Th tc x l thng ip+ Nhn v x l thng ip ca chng trnh.+ Mt chng trnh c th c nhiu th tc window.+ Mt lp ca s s khai bo 1 th tc window.+ Cc thng ip sau khi x l nn tr v gi tr 0.+ Dng tng qut:

    LRESULT CALLBACK WndProc(HWND hWnd, //handle ca window nhn messageUINT message, //ID ca thng ip (tn thng ip)WPARAM wParam, //thams th nht ca message (WORD)LPARAM lParam) //thams th hai ca message (LONG)

    {switch (message){

    case WM_COMMAND:return 0;case WM_PAINT:

    return 0;case WM_DESTROY:

    PostQuitMessage(0);return 0;

    default:return DefWindowProc(hWnd, message, wParam,lParam);

    }}

    Thng ip WM_PAINT:Cp nht li thng tin v trn mn hnh

    Cc trng thi xut hin thng ip WM_PAINT:i. To ca s Hin th Cp nht

    CreateWindow ShowWindow UpdateWindowii. Xut hin hp thoi (Dialog box), thng bo (Message box) lm

    che mt phn hoc ton b ca s, khi cc hp thoi ny ng ith phi gi WM_PAINT v li ca s.

    10

  • 8/6/2019 Bo Co S B - Lp Trnh API

    11/20

    iii. Khi thay i kch thc ca sWS_HREDRAW | WS_VREDRAW

    iv. Ca s ang minimize ,maximizeHDC: (Handle to a device context) ch n 1 ng cnh thit b gm

    thitb phn cng v trnh iu khin thit b.BeginPaint: Ly ng cnh thit b.EndPaint: Gii phng ng cnh thit b.

    Thng ip WM_DESTROY:+ Xut hin khi ngi dng chn nt close trn ca s hoc nhn

    Alt+F4.+ Nhim v PostQuitMessage t thng ip WM_QUIT vo hng i.

    11

  • 8/6/2019 Bo Co S B - Lp Trnh API

    12/20

    III, MT S THNH PHN C BN

    1. Ti nguyn ca ng dng (Resources)+ L 1 i tng (object) c s dng trong ng dng (VD: menu bar,

    dialog, bitmap, icon, cursor, ).+ c nh ngha bn ngoi v c thm vo trong file thi hnh cang dng khi bin dch (linking).

    + Cc dng resource:

    12

  • 8/6/2019 Bo Co S B - Lp Trnh API

    13/20

    2. Mt s kiu d liu mi:

    13

  • 8/6/2019 Bo Co S B - Lp Trnh API

    14/20

    3. Mt s hm ha c s:

    3.1 Nhm hm v

    + COLORREF GetPixel(HDC hDC, int nXPos, int nYPos);Ly v gi tr mu ti v tr (nXPos, nYPos) ca hDC, tr v -1 nu imny nm ngoi vng hin th.

    +COLORREF SetPixel(HDC hDC, int nXPos, int nYPos,COLORREF clrRef);V mt im mu clrRef ti v tr (nXPos, nYPos) ln hDC. Gi tr trv l mu ca im (nXPos, nYPos) hoc -1 nu im ny nm ngoivng hin th. +DWORD MoveToEx(HDC hDC, int x, int y);Di chuyn bt v n ta (x, y) trn hDC. Gi tr tr v l ta cca bt v,x = LOWORD, y = HIWORD.

    14

  • 8/6/2019 Bo Co S B - Lp Trnh API

    15/20

    +BOOL LineTo(HDC hDC, int xEnd, int yEnd);V on thng t v tr hin hnh n v tr (xEnd, yEnd) trn hDC.Hm tr v TRUE nu thnh cng, FALSE nu tht bi.

    +BOOL Polyline(HDC hDC, const POINT FAR *lpPoints, intnPoints);V ng gp khc ln hDC bng cc on thng lin tip, s nh lnPoints vi ta cc nh c xc nh trong lpPoints. Hm tr vTRUE nu thnh cng, FALSE nu tht bi.

    +BOOL Polygon(HDC hDC, const POINT FAR *lpPoints, intnPoints);V a gic c nPoints nh, ta cc nh c xc nh bi lpPoints.Hm tr v TRUE nu thnh cng, FALSE nu tht bi.

    +BOOL Rectangle(HDC hDC, int left, int top, int right, int bottom); V hnh ch nht c ta l left, top, right, bottom ln hDC.

    +HPEN CreatePen(int penStyle, int penWidth, COLORREFpenColor);To bt v c kiu penStyle, dy nt v l penWidth, mu penColor.Hm tr v handle ca bt v nu thnh cng v tr v NULL nu tht

    bi. Cc gi tr ca penStyle nh sau :

    3.2 Nhm hm minHBRUSH CreateSolidBrush(COLORREF cRef);

    To mu t c vi mu cRef.HBRUSH CreateHatchBrush(int bStyle, COLORREF cRef);

    To mu t dng li kiu bStyle vi mu cRef.Cc kiu bStyle :

    HS_HORIZONTALHS_VERTICALHS_FDIAGONAL

    15

  • 8/6/2019 Bo Co S B - Lp Trnh API

    16/20

    HS_BDIAGONALHS_CROSSHS_DIAGCROSS

    BOOL FloodFill(HDC hDC, int xStart, int yStart, COLORREFcRef);T mu mt vng kn, mu ng bin l cRef. BOOL ExtFloodFill(HDC hDC, int xStart, int yStart, COLORREFcRef, UINT fillStyle);T mu mt vng kn, fillStyle quyt nh cch t :- FLOODFILLBORDER : T mu vng c mu ng bin l cRef.-FLOODFILLSURFACE: T vng c mu cRef.

    4.HP THOI V IU KHIN

    4.1 Hp thoiHp thoi phi hp gia ngi s dng vi chng trnh bng mt s

    phn t iu khin m cc phn t ny nhn nhim v thu nhn thng tin tngi dng v cung cp thng tin n ngi dng khi ngi dng tc ng ncc phn t iu khin. Cc phn t iu khin ny nhn ca s cha l mt hpthoi. Cc phn t iu khin thng l cc Button, List Box, Combo Box,Check Box, Radio Button, Edit Box, Scroll Bar, Static.

    Hp thoi trng thi (modal).Hp thoi khng trng thi (modeless).

    Hp thoi thng dng (common dialog)

    4.2Thit k hp thai

    V d:

    IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 196, 102STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTIONCAPTION "Logon"

    16

  • 8/6/2019 Bo Co S B - Lp Trnh API

    17/20

    FONT 8, "MS Sans Serif"BEGIN

    DEFPUSHBUTTON "OK",IDOK,24,81,50,14 PUSHBUTTON "Cancel",IDCANCEL,109,81,50,14 LTEXT "User name",IDC_STATIC,7,23,40,15 LTEXT "Password",IDC_STATIC,7,50,40,16 EDITTEXT DC_EDT_NAME,52,19,137,16,ES_AUTOHSCROLLEDITTEXT IDC_EDT_PASSWORD, 52, 48, 137, 16, ES_AUTOHSCROLL

    END

    4.3Cc kiu iu khin

    Cc kiu iu khin c khai bo trong resource script c dng nh

    17

  • 8/6/2019 Bo Co S B - Lp Trnh API

    18/20

    sau, ngoi tr kiu iu khin LISTBOX, COMBOBOX, SCROLLBAR,EDITTEXT.

    Control-type "text", id, xPos, yPos, xWidth, yHeight, iStyleCc kiu iu khin LISTBOX, COMBOBOX, SCROLLBAR, EDITTEXTc khai bo trong resource script vi cu trc nh trnnhng khng c trng "text".

    Thm thuc tnh cho cc kiu iu khin bng cch thay i tham siStyle. V d ta mun to radio button vi chui din t nm bn tri cant th ta gn trng iStyle bng BS_LEFTTEXT c th nh sau:

    RADIOBUTTON Radio1",IDC_RADIO1,106,10,53,15,BS_LEFTTEXT

    4.4 Th tc x l hp thaic im :

    Mi hp thai cn c mt th tc x l ring. Cc thng ip khng c gi ti hm x l ca s chnh. L mt hm x l ca s.

    Mu hmBOOL CALLBACK Tn hm (HWND, UINT, WPARAM, LPARAM) ;

    C nhiu thng ip khc nhau. Khng cn x l WM_PAINT v WM_DESTROY. X l thng ip no th tr v TRUE, nu khng tr v FALSE.

    Thng phi x l hai thng ip chnh: WM_INITDIALOG vWM_COMMAND: LOWORD(WPARAM) cha ID cc iu khin.

    4.5 Hp thoi trng thi

    Hin th hp thoiINT_PTR DialogBox(HINSTANCE hInstance, // handle to moduleLPCTSTR lpTemplate, // dialog box template

    HWND hWndParent, // handle to owner windowDLGPROC lpDialogFunc // dialog box procedure);V d:

    DialogBox (hInstance, TEXT ("DIALOG1"), hwnd, DialogProc) ;Gi thng ip n hm WndProc yu cu x l ngay c khi hp

    thoi ang m nh hm SendMessage:SendMessage(GetParent(hDlg), message, wParam, lParam);

    Thm tiu cho hp thoi:

    SetWindowText(hDlg,TEXT("Hello Dialog")); trong x lthng ip WM_INITDIALOG

    18

  • 8/6/2019 Bo Co S B - Lp Trnh API

    19/20

    ng hp thoiBOOL EndDialog( HWND hDlg, // handle to dialog box INT_PTR nResult // value to return

    );

    4.6 Hp thoi khng trng thiHin th hp thoi

    HWND hDlgModeless=CreateDialog(hInstance, szTemplate,hwndParent, DialogProc);ShowWindow(hDlgModeless,SW_SHOW);

    while(GetMessage(&msg, NULL, 0, 0)){if (hDlgModeless==0 || !IsDialogMessage(hDlgModeless, &msg);{TranslateMessage(&msg);

    DispatchMessage(&msg);}

    }while(GetMessage(&msg, NULL, 0, 0)){if (hDlgModeless==0 || !IsDialogMessage(hDlgModeless,&msg);{if(TranslateAccelerator (hwnd, hAccel, &msg){TranslateMessage(&msg);

    DispatchMessage(&msg);}}}

    ng hp thoit hDlgModeless v gi tr 0.BOOL DestroyWindow(HWND hWnd // handle to window to destroy

    );

    19

  • 8/6/2019 Bo Co S B - Lp Trnh API

    20/20

    IV.Kt lunSau mt thi gian lm vic chung , ng gp kin v gip ln nhau

    khi tm hiu v lp trnh Windows API , chng em thu c nhng kinthc c bn v lp trnh API. Trong qu trnh nghin cu ,chng em nhn thy

    y l mt lnh vc rt hay , rt ng nghin cu , hc hi su hn . Mc d rt c gng nhng do ln u tip xc vi lp trnh Windows API nnchng em khng trnh khi nhng sai st .V vy chng em rt mong thy gp thm cho bi lm ca nhm

    Mt ln na, chng em xin cm n s nhit tnh ca thy gio gipnhm hon thnh bi tp ln ny

    20