You are on page 1of 5

Chng 2

Bi 3 Cu trc mt chng trnh trong windows Trong windows tt c nhng nt bm(button), editbox (hp son tho), listbox,combo box,...u c coi l mt windows(ca s), chnh v th khi lm vic trong windows bn hy c coi mi thnh phn chng ta lm l mt ca s iu hnh v qun l chng. Mi ca s windows(nh ni trn) c mt handle, handle l gi tr cha quyn qun l windows , khi bn c mt button hay mt static text,...bn s c mt handle ca n, v bn c th iu khin(thay i ni dung, lm cho nhn thy c, n i,...) nhng thnh phn ny. Bi Minh Trng Kosen01

Ct li ca windows l vic x l thng ip, thng ip l g, thng ip l nhng th ta gi qua n iu khin windows, v d chng ta bm chut vo windows th s kin bm chut c gi ti windows thng qua thng ip WM_LBUTTONDOWN, thng ip ny s nm trong hng i v i windows x l, vic nm trong hng i trong khong thi gian ngn nn bn khng th xc nh c, v ca s ca bn li i tip nhng thng ip khc n khi chng trnh bn kt thc. Chng ta hy xt mt v d c th sau y: Mt chng trnh windows hon ton c bn, bn c th ly m ngun ca n s dng cho vic lp trnh sau ny.Ch mt iu l bn khng phi nh bt k mt m lnh no, bn ch cn hiu cu trc ca chng trnh, sau khi lp trnh nhiu t khc bn s nh.Cc nh lp trnh cng khng ai nh ht m h s dng li nhng m ngun c v sa theo ca mnh. //filename program1: #include <windows.h> //Bn lun cn n dng lnh ny khi lp trnh trong windows #include <stdio.h> //Th vin chun ca C cho xut v nhp d liu //Di y l hm mu (funtion prototype) hay hm nguyn thu, ti sao ta phi cn hm ny?V trong hm //WinMain bn s cn n n nn ta phi khai bo n ra y, nu khng chng trnh dch s khng hiu //hm WinProc tn ti.Gi tr tr v l LRESULT, ch L vit tt cho Long, cn Result c ngha l kt qu //tr v, lp trnh trong win32 ta cn gi tr tr v l 32 bits nn hm ny tr v LRESULT.Sau gi tr tr v //l CALLBACK, thng s ny l quy c cho callback function.Nu bn mun bit r callback function l //g bn c th tm hiu trong cc sch dy v C, hay C++, ti xin nu qua nh sau: callback funtion c

//dng khi chng trnh chnh phi bo tn thng tin t chng trnh con khc.Bn c tm hiu l n c //dng trao i thng tin gia cc chng trnh. //Cc tham s trong hm ny ti s gii thch k phn di. LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd; //handle cho window ca bn MSG msg; //y chnh l thng ip qun l khi bn bm chut, tt chng trnh,.... WNDCLASSEX wndclass; //y chnh l class lu tr thng tin v tn, icon, cursor, mu , menu ca chng trnh ca bn //Tip theo chng ta s ci t cc gi tr cho lp window ny. wndclass.cbSize = sizeof (wndclass);//t kch c cho lp, tc l cung cp b nh cho n wndclass.style = CS_HREDRAW | CS_VREDRAW; //Kiu ca ca s l v li theo chiu ngang v chiu dc wndclass.lpfnWndProc = WndProc; //y l mt th tc ca ca s , n s kim tra cc thng ip tc ng n wndclass.cbClsExtra = 0; //Chng ta khng cn cp pht thm phn m rng cho ca s wndclass.cbWndExtra = 0; //Thng s ny cng vy, tm thi ta cha quan tm n. wndclass.hInstance = hInstance; //instance hin thi ca chng ta, bn c th c nhiu instance cng mt lc wndclass.hIcon = LoadIcon (NULL, IDI_WINLOGO);//icon ca chng trnh l logo ca windows wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);//Cursor c ly t cursor nh ngha sn //GetStockObject() gip ta ly mt thit b ho nh chi t, bt v,...n tr v HGDIOBJ (handle cho GDI) //V vy chng ta cn phi bin i sang HBRUSH(handle cho chi t).Chng ta chn chi t l mu trng wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wndclass.lpszMenuName = NULL; //Chng ta cha quan tm n menu ca chng trnh, hy tm thi b qua wndclass.lpszClassName = "Window Class 1";//t tn cho lp ca s ny, phn bit vi cc ca s khc wndclass.hIconSm = LoadIcon (NULL, IDI_WINLOGO);//icon ny nm bn tri pha trn ca ca s, hy tm thi dng logo ca windows RegisterClassEx (&wndclass);/*Bn ch im ny, chng ta phi ng k vi h iu hnhwindows rng chng ta s dng lp ny.Chng ta cng cn h iu hnh cung cp b nh cho ca s ny v th chng ta dng thm k t

"&".By gi chng ta mi chnh thc to ca s ca mnh vi cc thng s c ci t trn.*/ hwnd = CreateWindow ("Window Class 1",//lp m chng ta ng k bn trn "My First Window",//Tiu ca ca s, n s hin trn u ca ca s v trn task bar WS_OVERLAPPEDWINDOW,/*Kiu ca ca s l kiu thng dng, c nhng tnh nng nh thay i kch c, lm nh, phng to, tt ca s,vv...*/ CW_USEDEFAULT, /*Ci t to x, tc l to x ca gc trn bn tay tri ca ca s.Ta windows t t cho chng ta.*/ CW_USEDEFAULT, /*Ci t to y, to y ca gc trn bn tay tri ca ca s.Ta cng windows t cho.Bn c th t t nu mun.*/ CW_USEDEFAULT,//Ci t chiu rng ca ca s, windows s t cho chng ta CW_USEDEFAULT, //Ci t chiu cao ca ca s, windows cng s t t NULL, /*Ca s cha ca ca s chng ta, v chng ta cha c ca s cha nn t n l NULL*/ NULL,/*Tham s ny l handle ca ca s, v chng ta cha c menu nn t l NULL */ hInstance,/*Tham s ny l handle ca chng trnh */ NULL);/*Tham s cui cng ny l handle ca instance, chng ta ch gi instance ca chng ta trong winmain , v th h iu hnh s lu tr ht thng tin cho chng ta, chng ta khng cn quan tm n na, vy n l NULL*/ ShowWindow (hwnd, iCmdShow); //Sau khi to xong chng ta hin th ca s va to ln. UpdateWindow (hwnd);//Bn phi c dng lnh ny cp nht khi thng tin ca ca s b thay i. //Vng lp ny l trung tm ca ca s, n i cc thng ip n v x l chng n khi chng trnh kt thc //Hm GetMessage() s in y thng tin cho cu trc msg, chng ta handle ca ca s l NULL v mun nhn //thng ip t tt c cc ca s, cc tham s sau khng quan trng, ta tm t cho n bng 0 while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg);//Dng lnh ny s dch thng ip windows c th hiu chng DispatchMessage (&msg);//Dng lnh ny s gi thng ip va dch n th tc WinProc x l } return msg.wParam ;/*Gi tr tr v l 32 bits , msg.wParam cha thng tin

ca thng ip, l ti sao chng ta li chn cho hm WinMain tr v gi tr nguyn.Bn s thy chng ta s dng thng s ny trong cc bi sau*/ } //Bn ch th tc ny rt quan trng, trong cc chng trnh khc nhau th s khc nhau, cn hm WinMain th c th ging nhau //V th bn khng cn nh cu trc ca hm WinMain vi m hy nh ly cu trc ca WinProc LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch (iMsg)//Kim tra thng ip n ca s { //Trong bi ny bn ch cn ch n thng ip WM_DESTROY, ti ch gii thiu cc thng ip //khc cho c h thng.Ch l nhng thng ip c tip u ng l WM_ c nh ngha sn. case WM_CREATE: //Thng ip ny c x l khi ca s c to, bn hy khi to tt c y break; case WM_SIZE: //Thng ip xy ra khi ca s b thay i kch c break; case WM_PAINT:/*Thng ip ny c gi ti khi ca s cn v li, tc l khi bn di chuyn ca s, thay i kch c, lm to, thu nh,...n s v li ca s cho bn*/ break; case WM_DESTROY:/*Thng ip ny c gi n khi ngi dng ng ca s*/ PostQuitMessage(0);/*Hm ny bo vi windows l chng ta mun ng ca s.Bn nn gii phng b nh,ng cc chng trnh....ti y*/ break; } //Dng lnh ny s bo vi windows x l cc thng ip m chng ta khng quan tm, hay nhng thng ip //chng ta cha bit n.Mc ch l tt c cc thng ip u c x l. return DefWindowProc (hwnd, iMsg, wParam, lParam); } l ton b mt khung chng trnh c bn trong windows, chng ta s cng nhau n li cc bc lm : Bc 1: Khi to lp Bc 2: ng k lp Bc 3: To ca s Bc 4: Nhn thng ip t WinProc Bc 5: Dch thng ip v x l thng ip .

Ni tm li, khi bn khi to ca s xong, ngi dng s tc ng n chng trnh ca bn v l nhng thng ip. WinProc s c nhim v nhn nhng thng ip v gi cho WinMain, WinMain s dch thng ip v x l thng ip . Bn bit to mt chng trnh trong windows v hy t mnh lm mt ca s vi nhng thng s mi v kch c, mu nn, bn mun tm hiu su hn th xin hy tra trong MSDN.Chng ta s chuyn qua bi mi.

You might also like