LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
Các câu lệnh trong lập trình c trên win
Tập tin Vidu1.H: chứa các khai báo liên quan đến lớp Cvidu1App:
Tập tin MainFrm.H: chứa các khai báo liên quan đến lớp khung cửa sổ
chính (main frame) của ứng dụng.
Tập tin Vidu1Doc.H: chứa các khai báo liên quan đến tài liệu.
Tập tin Vidu1.RC: chứa các tài nguyên liên quan đến menu, phím nóng,
hộp hội thoại,…
Tập tin Vidu1.CPP: định nghĩa các hàm đã khai báo trong lớp
CVidu1App, là lớp chương trình chính.
I- TẠO GIAO DIỆN:
1.CÂU LỆNH TẠO VỊ TRÍ XUẤT HIỆN CỦA CỬA SỔ(viết trong miền
làm việc (lop)classview->chon lop cmainfrane->precreatewindow)
//BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
//{
// if( !CFrameWnd::PreCreateWindow(cs) )
// return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
int xsize =GetSystemMetrics(SM_CXSCREEN);
int ysize =GetSystemMetrics(SM_CYSCREEN);
cs.cx=xsize*5/10;// nằm giữa màn hình
cs.cy=ysize*5/10;// nằm giữa màn hình
cs.x =(xsize-cs.cx )/2;
cs.y =(ysize-cs.cy )/2;
//return true;
Chú ý: thay vì những câu lệnh đã có sẵn trong chương trình ta ghi chép lại nên
chúng ta để chúng nằm trong dấu 2 sẹt // nha.
2 . LOẠI BỎ MINIMIZE VÀ MAXIMIZE (viết trong miền làm việc
(lop)classview->chon lop cmainfrane->precreatewindow)
{
\\ chú thích: loại bỏ thu nhỏ phóng to
cs.style&=~(WS_MAXIMIZEBOX);
\\ chú thích: loại bỏ thu xuống thanh dưới
cs.style&=~(WS_MINIMIZEBOX);
//return true;
}
3.KHÔNG CHO THAY ĐỔI KÍCH THƯỚC CỬA SỔ LÀM VIỆC:
1
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
(viết trong miền làm việc classview->cmainfrane->precreatewindow)
{
cs.style&=~ WS_THICKFRAME;
//return true
}
4.TẠO CỬA SỔ CỰC ĐẠI KHI ỨNG DỤNG BẮT ĐẦU CHẠY:
(Vào classview->cmainfrane-> têndự ánApp->initialized)
-Trong câu lệnh: m_pMainWnd->ShowWindow(SW_SHOW);
Đổi thành:
=> m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);//tao cua so cuc dai khi
ung dung bat dau chay.
5. Tạo hộp thoại:
B1: Vào ResourceView-> menu->tạo tên mục trên thanh menu
- Trong caption: gõ tên hiển thị khi chạy chương trình.
Vd: Bạn muốn tao menu thông báo thì trong caption bạn gõ: &Thongbao
Khi đó kết quả hiển thị bây giờ là: Thongbao
Trong đó:& là để tạo phím tắt khi chạy chương trình ta có thể bấm fím
tắt cho thao tác được nhanh hơn khi chọn menu thongbao ấy bằng
cách sử dụng fím ALT+T
Chú ý:-Trong một menu không thể tạo phím tắt giống nhau, bạn muốn
tạo phím tắt kí tự nào thì chỉ cần để “&” trước kí tự đó.
Vd :t&hongbao: thì khi chạy nhấn alt+H
- Địa chỉ ID lúc này đang mờ, bạn muốn nó hiện lên thì kích chuột vào
pop-up để bỏ dấu check.
- Ghi địa chỉ vào ID:
Thí dụ như: ID_thongbao
*Lưu ý:
- Lúc này bạn không được tạo menu con ở dưới thanh menu bạn vừa mới
tạo.
- Để tạo menu con bạn kích lại vào pop-up, trên thanh menu sẽ xuất hiện
menu trống để bạn tạo, bạn chỉ cần kích vào đó.
- Lúc này bạn phải điền đầy đủ thông tin:
+ Caption là:tên
Để tạo phím tắt cho menu :
-> Cách 1 : dùng kí tự «& » như trên
-> Cách 2 :tên\tctrl+kí tự
Vd :&thôngbao\tctrl+T
Kết quả xuất hiện bây giờ đó là : thôngbao ctrl+t
2
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
- Chú ý : Để cho phim tắt có hiệu lực bạn vào
Resources View->Accelerator-> IDR_MAINFRAME và tạo phím tắt ở
đây.
+ ID : thì bạn đánh địa chỉ của menu vào
B2 :Vào View trên thanh công cụ-> classviewzard (hoặc Ctrl+W)
- Opject IDs:Chọn tên địa chỉ ID của menu vừa tạo
- Messager:+ Chọn command->add…: viết câu lệnh cho menu vừa tạo
bằng cách click vào nó(hoặc click edit code…), nếu bạn không muốn
thay đổi tên thì bạn bấm ok. (Dùng để tạo hộp thoại)
+ Chọn update_command_UI: làm cho câu lệnh vô hiệu lực, hoặc có
hiệu lực.
pCmdUI->Enable(m_bWzd);
Nếu m_bWzd =TRUE thì menu trở nên hoạt động,
Nếu m_bWzd = FALSE có kết quả ngược lại.
- Chú ý: messager: chọn UPDATE_COMMAND_UI thì edit code của nó để vô
hiệu hoặc có hiệu lực cho việc hiển thị bên ngoài giao diện còn ngược lại hầu hết
thì ta đều chọn COMMAND
- Cú pháp tạo hộp thoại:
{
AfxMessageBox(“Thông báo", MB_YESNO);
// hiển thị chuỗi + cả 2 command yes and no để ta chọn
}
Vd:
AfxMessageBox(“bạn đã tạo thông báo thành công”,MB_OK);
6.Tạo thanh công cụ:
=>B1:Vào insert->resource->toolbar->new
- Lúc này bạn tạo thanh công cụ mới, bạn phải đặt tên địa chỉ cho thanh
cộng cụ bạn vừa mới tạo bằng cách : kích chuột phải vào
IDR_TOOLBAR1-> vào propertise -> đổi tên
- Các nút công cụ bạn vừa tạo phải ghi địa chỉ ID cho nó bằng cách click
chuột vào nó.
Cách 2: ResourcesView->click chuột phải vào toolbar chọn insert
=>B2:Vào classview->chọn m_wndtooolbar
- Trong hàm protected bạn có thể thêm đối tượng ở hàm Ctoolbar vào bên
dưới:
Ctoolbar tên_đối tượng;
3
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
Vd: Ctoolbar hi;
=>B3: Vào CmainFrame -> oncreated() đổi tên như bước2.
Vd:copy đoạn mã và đổi tên cho phù hợp
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |
WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY |
CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
Lưu ý: - Bạn phải thay đổi các tên m_wndtoolbar => hi.
Trong đó :hi là tên bạn tạo trong khai báo ở hàm ctoolbar.
Và IDR_MAINFRAME phải đổi thành tên địa chỉ ID bạn đặt ở B1.
Khi việc đổi tên hoàn tất bạn có thể sắp xếp thanh công cụ bằng cách:
- Tìm đoạn mã sau:
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
Trong đó:
DockControlBar( CControlBar *pBar, UINT nDockBarID= 0);
pBar: con trỏ đối tượng toolbar
nDockBarID: gtrị xác định vị trí thanh công cụ
AFX_IDW_DOCKBAR_TOP : Toolbar xếp vào phía trên vùng
client cửa sổ
AFX_IDW_DOCKBAR_BOTTOM : Toolbar xếp vào phía dưới
vùng client cửa sổ
AFX_IDW_DOCKBAR_LEFT : Toolbar xếp vào phía bên trái
vùng client cửa sổ
AFX_IDW_DOCKBAR_RIGHT : Toolbar xếp vào phía bên phải
vùng client cửa sổ
Vd:
hi.EnableDocking(CBRS_ALIGN_ANY);
4
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&hi, AFX_IDW_DOCKBAR_BOTTOM );
7.Thêm text vào nút toolbar :
Vào cMainfram->cú pháp này được viết trong Oncreate(…)
- Cú pháp:
SetButtonText( int nIndex, LPCTSTR lpszText );
• nIndex: số thứ tự của nút thêm text
• lpszText: chuỗi văn bản thêm vào
Xác định kích thước các nút trong toolbar và kíchước iMage
SetSizes( SIZE sizeButton, SIZE sizeImage );
Ví dụ:
hi.SetButtonText(0,_T("mo"));
hi.SetSizes(CSize (40,36),CSize (15,14));
Trong đó:
0 là vị trí nút cần thêm text
Hi : là tên thanh công cụ được tạo ở trên.
8.Tạo thanh trạng thái:
B1: vào fileview->source file->MainFrm.cpp
- Trong hàm “static UINT indicators[] =” bạn thêm thanh trạng thái mới.
Vd: ID_INDICATOR_TG,//do người dùng đặt tên
B2:khai báo vao resoure->string table-> string table ->chon hàm có
ID_INDICATOR_ rồi đặt tên cho no băng cách kích chuột phải ->new
string->go tên
B2:Tạo hiển thị cho cho chỉ danh: khai báo ở phía dưới trong
MainFrm.cpp
void CMainFrame::OnUpdateStbarnew(CCmdUI* pCmdUI)
{
pCmdUI->Enable(true);
}
Trong đó: Stbarnew do người dùng đặt.
B3:Vào fileview-> Header Files-> MainFrm.h
- Trong hàm protected gõ lệnh:
afx_msg void OnUpdateStbarnew(CCmdUI* pCmdUI);
B4: Trở lại bảng -> MainFrm.cpp:
- Trong hàm BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) gõ lệnh:
5
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
ON_UPDATE_COMMAND_UI(ID_INDICATOR_TG,OnUpdateStbarnew)
B5: Nhấn F7 kiểm tra lỗi và nhấn F5 để chạy.
II- CÁC HÀM ĐỒ HỌA:
1.Tạo đường thẳng:
B1:Tạo menu hoặc thanh công cụ như đã trình bày ở trên.
B2:Vào view-> classwinzar.
B3:Chọn địa chỉ ID của nút công cụ vừa mới tạo ở thanh toollbar hoặc menu
->click vào command->ok->edit code và gõ lệnh:
C1:
- Cú pháp: CDC * pDC = GetDC();; // Khai báo thiết bị DC.
• ReleaseDC(hWnd, hDC); // Giải phóng DC
pDC -> LineTo(int X, int Y);
pDC -> MoveToEx(int X, int Y);
Vd: CDC*pDC=GetDC();
pDC->MoveTo(100,100);//tọa độ gốc
pDC->LineTo(200,200);//chiều dài hình vẽ
C2:
Khai báo:
POINT p,p1;
p.x=200 ;
p.y=200 ;
p1.x=100 ;
p1.y=100 ;
CDC*pDC=GetDC();
pDC->MoveTo(p1); //tọa độ gốc
pDC->LineTo(p); //chiều dài hình vẽ
2.Hình chữ nhật : ( viết tượng tự như ở các bước tạo đường thẳng)
=> Hình chữ nhật thường :
- Cú pháp :
pDC -> Rectangle(int upX, int upY, int lowX, int lowY);
upX, upY: góc trên bên trái
lowX, lowY: góc dưới bên phải
vd:
CDC*pDC=GetDC();
pDC -> Rectangle(200,200,400,300);
=> Hình chữ nhật vuông:
6
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
- Cú pháp:
pDC-> RoundRect(int x1, int y1, int x2, int y2, int x3, int y3)
vd : CDC*pDC=GetDC();
pDC-> RoundRect(200,200,400,300,50,50);
3.Hình elip ( viết tượng tự như ở các bước tạo đường thẳng)
- Cú pháp:
pDC->Ellipse(int upX, int upY, int lowX, int lowY);
upX, upY: góc trên bên trái
lowX, lowY: góc dưới bên phải
vd:
CDC*pDC=GetDC();
pDC->Ellipse(400,400,600,500);//(400,200,600,400)hình tròn
4.Vẽ Pie(Hình tròn Khuyết): ( viết tượng tự như ở các bước tạo đường thẳng)
- Cú pháp:
pDC->pie(int upX, int upY, int lowX, int lowY, int Xs, int Ys, int Xe, int Ye);
upX, upY: góc trên bên trái
lowX, lowY: góc dưới bên phải
Xs, Ys: Điểm bắt đầu cung
Xe, Ye: Điểm kết thúc cung
Vd:
CDC*pDC=GetDC();
pDC->Pie(100,100,200,200,150,100,200,150);//
(400,200,600,400,500,100,600,300)
5.Đường Liền Kề Nhau: ( viết tượng tự như ở các bước tạo đường thẳng)
- Cú pháp:
pDC->Polyline(POINT pt, int n);
pt: mảng chứa các điểm tọa độ
n : số lượng tọa độ
vd:
POINT pt[10];
{
int x;
int y;
}
pt[0].x=200;
7
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
pt[0].y=300;
pt[1].x=250;
pt[1].y=200;
pt[2].x=300;
pt[2].y=300;
pt[3].x=350;
pt[3].y=200;
pt[4].x=400;
pt[4].y=300;
CDC*pDC=GetDC();
pDC->Polyline(pt,5);
6.Tạo thuộc tính bút vẽ : ( viết tượng tự như ở các bước tạo đường thẳng)
- Cú pháp :
CPen pen(int style, int width, COLOREF color);
• Style: kiểu bút vẽ và có các giá trị:
– PS_DASH : Gạch ngang
– PS_DASHDOT : Gạch ngang chấm
– PS_DASHDOTDOT : Gach ngang chấm chấm
– PS_DOT : Chấm
– PS_SOLID : Đường thẳng liền nét.
• Width: độ dày của bút vẽ
• Color: RGB(R, G, B)
CPen *pPen = pDC->SelectObject(&pen) //thiết lập
Vd:
CPen pen(PS_SOLID,3,RGB(19,211,65));
CPen*pPen = pDC->SelectObject(&pen) ;
- Chú ý: Phải đặt trước lệnh tạo đồ họa.
7.Tạo chổi quét ( Tạo màu nền)// (viết tượng tự như ở các bước tạo đường
thẳng)
-Cú pháp:
Cbrush Brush (COLOREF color)
• Color: RGB(R, G, B)
Thiết lập chổi quét :
CBrush *pBrush = pDC->SelectObject (&Brush)
- Chú ý: Phải đặt trước lệnh tạo hình vẽ ý
Vd: CBrush Brush(RGB(0,255,0));
CBrush*pBrush = pDC->SelectObject(&Brush);
8
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
- HS_BDIAGONAL:
- HS_CROSS:
- HS_DIAGCROSS:
- HS_FDIAGONAL:
- HS_HORIZONTAL:
- HS_VERTICAL:
Vd:
CBrush Brush(HS_VERTICAL,RGB(0,250,0));
CBrush*pBrush = pDC->SelectObject(&Brush);
8.Tạo text lên cửa sổ:(tương tự)
- Cú pháp:
pDC->TextOut( x, y, string, strLength);
pDC-> SetTextAlign(TA_CENTER) // hàm thiết lập
Trong đó:
pDC là device context của cửa sổ cần xuất.
x, y điểm bắt đầu của chuỗi ký tự trong client
string là một con trỏ trỏ đốn một chuỗi ký tự.
strLength là số ký tự trong chỗi cần xuất.
Ví dụ:
void CMainFrame::Ontraitim()
{
// TODO: Add your command handler code here
CDC*pDC=GetDC();
CString str("Ban co mot trai tim tinh khuyet");
pDC->TextOut(400,100,str, str.GetLength());
pDC-> SetTextAlign(TA_CENTER) ;
}
9. Thiết lập màu chữ : (Phải đặt trước lệnh tạo text.)
pDC-> SetTextColor(COLOREF color);
Vd:
CDC*pDC=GetDC();
pDC-> SetTextColor(RGB(250,0,0));
Thiết lập màu nền (Phải đặt trước lệnh tạo text.)
9
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
pDC-> SetBkColor(COLOREF color)
Vd:
CDC*pDC=GetDC();
pDC-> SetBkColor(RGB(250,0,0));
VD:Tạo hình người viết trong mainfrm.cpp:
CDC*pDC=GetDC();
pDC->Ellipse(400,100,500,200);
pDC -> Rectangle(440,200,460,230);//co
pDC -> Rectangle(370,228,530,400);//than
pDC->Ellipse(423,125,443,133);
pDC->Ellipse(463,125,483,133);//MAT
pDC->MoveTo(453,140);
pDC->LineTo(444,155);
pDC->MoveTo(453,140);//MUI
pDC->LineTo(462,155);
pDC->MoveTo(444,155);
pDC->LineTo(462,155);
pDC->MoveTo(453,180);//MIENG
pDC->LineTo(428,170);
pDC->MoveTo(453,180);
pDC->LineTo(473,170);
pDC->MoveTo(370,228);
pDC->LineTo(290,420);
pDC->MoveTo(370,290);//taytrai
pDC->LineTo(300,420);
pDC->MoveTo(290,420);
pDC->LineTo(302,420);
pDC->MoveTo(530,230);
pDC->LineTo(610,420);
pDC->MoveTo(530,290);//tayphai
pDC->LineTo(600,420);
pDC->MoveTo(600,420);
pDC->LineTo(611,420);
10
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
pDC->MoveTo(370,400);
pDC->LineTo(355,600);
pDC->MoveTo(450,450);
pDC->LineTo(375,600);//chan
pDC->MoveTo(530,400);
pDC->LineTo(545,600);
pDC->MoveTo(450,450);
pDC->LineTo(525,600);
pDC->MoveTo(355,600);
pDC->LineTo(375,600);
pDC->MoveTo(525,600);
pDC->LineTo(545,600);
CBrush Brush(RGB(50,250,0));
CBrush *pBrush = pDC->SelectObject (&Brush);
pDC->MoveTo(370,385);
pDC->LineTo(530,385);
pDC -> Rectangle(440,385,460,400);//thaclung
pDC-> SetTextColor(RGB(0,0,0));
pDC-> SetBkColor(RGB(250,0,0));
CString str("CHAO CAC BAN!!");// tao text
pDC->TextOut(400,80,str, str.GetLength());
pDC-> SetTextAlign(TA_CENTER) ;
10.Thuật vẽ Bitmap(chèn ảnh):
B1:tạo menu hoặc tool
B2:Tạo nguồn Bitmap trong tập tài nguyên có đuôi .rc bằng cách:
Chọn file ->open->chọn đuôi .rc(trong save as chọn text)->open->gõ
lệnh tạo nguồn vào hình cần chèn.
Vd: ID_BITMAP BITMAP "C:\HINH\h.bmp".
ID do người dùng đặt.
B3:vào classwinzard->chọn địa chỉ cần thực hiện(lớp cmainfram)
->command(kích đôi)->edit code.
B4:gõ lệnh:
CBitmap bm;//khai báo
bm.LoadBitmap(ID_BITMAP);//nạp bitmap từ tài nguyên.
CDC*pDC=GetDC();
CDC mDC;
mDC.CreateCompatibleDC(pDC); //Đạt được DC của bộ nhớ sẽ chứa bitmap
11
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
mDC.SelectObject(bm);// Chọn bitmap trong device context của
bộ nhớ.
BITMAP TT;//khai báo
bm.GetObject(sizeof(TT),&TT);//nhập thông tin của bitmap
pDC->BitBlt (100,300,TT.bmWidth,TT.bmHeight,&mDC,0,0,SRCCOPY);
//Sao chép bitmap từ DC của bộ nhớ sang DC của cửa sổ.
-Trong đó:bm,TT,mDC:do người lập trình đặt.
B5: vào resouce.h định nghĩa.
#define ID_BITMAP 32804 //số này không trùng với số
ở phía trên.
B6:chạy chương trình
11.Tạo font cho text:
B1: tạo ra text đã học ở trên
B2:thiết lập font:được viết trên text.
CFont Font;//do ngườ lập trình đặt tên
B3: gọi
Font.CreateFont để tạo ra font có thuộc tính xác định
Font.CreateFont(int Height, //kích thước điểm
0, 0, 0,
FW_NORMAL, // Độ dầy, có thể là FW_BOLD
0, // nếu 1 nghiêng
0, // Nếu 1 gạch dưới
0, //nếu 1 gạch ngang
0,0, 0, 0,0,“VNI-Times”); //kiểu chữ .
B4: Gọi SelectObject() cài đặt Font vào vùng client.
Font.CreateFont(40,0,0,0,FW_BOLD,0,1,0,0,0,0,0,0,"VNI-Times");
CFont *pFont = (CFont *) pDC->SelectObject(&Font);
SetFont(pFont);//thiết lập.
Vd: void CMainFrame::Onhi()
{
// TODO: Add your command handler code here
CDC*pDC=GetDC();
CFont f;
f.CreateFont(40,0,0,0,FW_BOLD,0,1,0,0,0,0,0,0,"VNI-Times");
CFont *pFont = (CFont *) pDC->SelectObject(&f);
SetFont(pFont);
12
Lấ QUANG V C TIN 31B
KHOA:CNTT
CString str("baùn ủaừ taùo font chửừ thaứnh coõng!!");
pDC->TextOut(400,300,str, str.GetLength());
pDC-> SetTextAlign(TA_CENTER) ;
}
III-HM X Lí THễNG IP CHUT:
1).To hỡnh khi nhn chut:
B1:to nỳt tool hoc menu
B2: vo classwinzard chn lp view, chn thụng ip chut trong messages
B3:khai bỏo bin bng cỏch kớch chut phi vo lp view chn Add Member
Variblegừ kiu v bin do ngi lp trỡnh t.
Vd:to hỡnh ch nht v ng thng
B1:trong thụng ip chut OnLButtonDown
void CBaitap2View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (hinh==1)
{
if (lc==1)
{
pl.x=point.x;
pl.y=point.y ;
lc=2;
}
else
{
CDC*pDC=GetDC();
CBrush Brush (RGB(200,100,0));
CBrush *pBrush = pDC->SelectObject (&Brush);
pDC->Rectangle(pl.x,pl.y,point.x,point.y);
lc=1;
}
}
if (hinh==2)
{
if (lc==1)
{
pl.x=point.x;
pl.y=point.y ;
13
LÊ QUANG VŨ CĐ TIN 31B
KHOA:CNTT
lc=2;
}
else
{
CDC*pDC=GetDC();
pDC->MoveTo(pl.x,pl.y);
pDC->LineTo(point.x ,point.y);
lc=1;
}
}
CView::OnLButtonDown(nFlags, point);
}
Trong đó:
Pl: khai báo Cpoint
Lc:kiểu int
B2: vào classview- chọn địa chỉ ID do người lập trình tạo->chọn trong lớp view-
>command và gõ lệnh
Vd:
void CBaitap2View::Onhinhcn()
{
// TODO: Add your command handler code here
hinh=1;
}
void CBaitap2View::Ondt()
{
// TODO: Add your command handler code here
hinh=2;
}
B4:vào ten_du_an_view->kích vào ten_du_an_view->gõ lc=1.
B3: chạy chương trình.
14