You are on page 1of 9

Lp trinh C trn Windows

Lp trinh C trn Windows Bai thc hanh s 1


Muc ich: Giup sinh vin nm c cach thc lp trinh (programming) va bin dich mt chng trinh C trn Windows bng b phat trin phn mm Visual C++ 6.0 (thuc b Visual Studio 6.0) cua Microsoft. Bc u vit cac chng trinh ng dung n gian nht trn Windows. Cac bc thc hin: 1. Tao th muc lam vic (cha cac file cua ng dung se vit): Mi chng trinh vit bng C trn Windows se c t trong mt th muc ring bit nn bc u tin ta cn tao mt th muc cha cac ng dung lam vic, trong qua trinh vit cac chng trinh, cac file se c cha trong cac th muc ring bit cua th muc nay. Vi du mi sinh vin nn tao mt th muc: Lap trinh C tren Windows trn D hoc tai mt th muc a thich nao o. Ch nn t tn th mc theo tn mnh v cc chi tit khc (tn lp, ngy sinh) trng vi cc sinh vin khc. 2. Cai b Visual Studio ln may tinh. thc hin cai t cn co ia cai Visual Studio 6.0 (it nht la 1 ia CD), cac bc cai t cn tham khao trong tai liu i kem ia CD. Sau khi cai t xong nn khi ng lai may tinh va tao mt shortcut ti chng trinh Visual C++ 6.0 ln man hinh tin lam vic. 3. Vit chng trinh Vidu1 chi co mt ca s chng trinh duy nht theo cac bc sau: Chay chng trinh Visual C++ 6.0, ca s chng trinh se hin thi nh sau:

Bt u vit chng trinh bng cach vao muc File New va chon tab Project, chon muc Win32 Application Go vao Project Name la Vidu1, chon muc Location chi ti th muc cha cac ng dung a tao ra bc 1.

-1-

Lp trinh C trn Windows

Nhn OK, ca s tip sau se hin thi:

Nhn Finish kt thuc

-2-

Lp trinh C trn Windows

Chon OK Sau cac bc o chung ta a tao thanh mt Project (d an mi chng trinh vit trn b Visual C++ la mt d an, chung ta hiu nm na la cach kim soat cac file chng trinh gm cac file ma ngun, file d liu, vn vn cua Visual C++) rng, cha co file ma ngun hay tai nguyn (resource cac file d liu ) nao ca.

-3-

Lp trinh C trn Windows Vao muc Project Add to Project New va chon muc C++ Source File trong tab Files, go vao phn File name la vidu1.c, sau o nhn OK.

Khi o ca s chng trinh se la file vidu1.c chung ta co th soan thao ni dung cua file nay:

#include <windows.h> const char g_szClassName[] = "Lop cua so";

Go ni dung cua file vidu1.c nh sau:

-4-

Lp trinh C trn Windows


// khai ba ha xlythng i c s o m p a LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hwnd; MSG Msg; //Step 1: Registering the Window Class wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName = NULL; wc.lpszClassName = g_szClassName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&wc)) { MessageBox(NULL, "Khong dang ky duoc lop cua so!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } // Step 2: Creating the Window hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName, "Tieu de cua cua so", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL); if(hwnd == NULL) { MessageBox(NULL, "Khong tao duoc cua so!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam;

// Step 4: the Window Procedure LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CLOSE: DestroyWindow(hwnd);

-5-

Lp trinh C trn Windows


break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; }

Nhp chut vao biu tng ia mm ghi lai file vidu1.c. Nhn t hp phim Ctrl+F7 dich file vidu1.c (chi dich file nay ch khng lin kt tao thanh chng trinh chay c). Nu co li vi du nh ch const go sai thanh cnst thi nhp up chut ln thng bao li chay ti dong li va sa:

-6-

Lp trinh C trn Windows Nu khng co li gi trinh bin dich se bao la 0 errors va 0 warnings. Nhn phim F5 hoc nhp chut ln biu tng du chm than phn dich chng trinh thanh file chay, trinh bin dich se lin kt vi cac th vin h thng tao thanh file vidu1.exe trong th muc debug di th muc Vidu1 (cha ng dung) va chay file o. Kt qua chng trinh nh sau:

Hay thay cac tham s: COLOR_WINDOW+1 thanh COLOR_WINDOW, Tieu de cua cua so thanh Vi du 1: chuong trinh don gian va kich thc ca s t 240, 120 thanh cac kich thc khac (vi du nh CW_USEDEFAULT) va bin dich, chay th. ong Visual C++. Xoa th muc Debug trong th muc Vidu1 M lai ng dung a vit bng cach vao th muc Vidu1 nhp up chut ln file Vidu1.dsw, dich va chay lai chng trinh. Giai thich: ham MessageBox() la ham tao thanh mt thng bao (li, xac nhn, thng tin, canh bao) cho ngi dung. 4. Thay i chng trinh Vidu1 a vit phn 3 tao thanh chng trinh Vidu2 co thm cac thao tac x ly n gian cac thng ip nhn chut nh sau: Chay Visual C++ 6.0 Tao mt d an cho mt ng dung mi, t tn d an la Vidu2 (khi o mt th muc Vidu2 se c tao ra tai th muc Lap trinh C tren Windows). Copy file vidu1.c sang th muc Vidu2 va i tn thanh vidu2.c Vao muc Project Add to Project Files, chon file vidu2.c va OK.

-7-

Lp trinh C trn Windows

Vao muc FileView Source Files vidu2.c:

Sa lai ni dung cua ham WndProc() thanh nh sau: LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_LBUTTONDOWN: MessageBox(NULL, "Left button click!", "Mouse Click!", MB_ICONINFORMATION | MB_OK); break; case WM_RBUTTONDOWN: { char szFileName[MAX_PATH];

-8-

Lp trinh C trn Windows HINSTANCE hInstance = GetModuleHandle("firefox"); GetModuleFileName(hInstance, szFileName, MAX_PATH); MessageBox(hwnd, szFileName, "This program is:", MB_ICONINFORMATION); } break; case WM_MBUTTONDOWN: MessageBox(NULL, "Middle button click!", "Mouse Click!", MB_ICONINFORMATION | MB_OK); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } Ghi lai file vidu2.c. Bin dich va chay chng trinh. Giai thich: MAX_PATH la mt macro (kiu nh hng define) thuc windows.h inh nghia dai ti a cua mt xu cha dai ng dn ti mt file trn windows. Ham API GetModuleHandle() vi tham s la NULL thi kt qua tra v se la handle tro ti file c s dung tao ra tin trinh a goi ham, o chinh xac la cai ma chung ta cn goi ham GetModuleFileName(). Va do o chung ta co cu lnh:
HINSTANCE hInstance = GetModuleHandle(NULL);

MB_OK

Ham API GetModuleFileName() tra v ng dn ti chng trinh tham chiu bi tham s th nht khi goi ham, ng dn o c cha tham s th hai (mt xu). Trong vi du 2 chung ta a t x ly cac thng ip nhn chut, trong vi du 1 cac thng ip nay do ham DefWindowProc() thc hin (ng thi no cung kim lun cac thng ip nh thay i kich thc ca s, minimize, maximize vn vn). Chu y: th muc Vidu1 (hoc Vidu2) tng ng la cac chng trinh c lp, copy cac ng dung nay chung ta nn xoa kt qua bin dich chng trinh (th muc Debug) va copy ca th muc Vidu1. m lai mt ng dung chung ta vao th muc cha ng dung va m file co phn tn m rng la dsw.

-9-

You might also like