1. Trang chủ
  2. » Giáo án - Bài giảng

Giáo án - Bài giảng: BÀI TẬP MÔN LẬP TRÌNH WINDOWS

86 819 2
Tài liệu đã được kiểm tra trùng lặp

Đ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ài Tập Môn Lập Trình Windows
Trường học Trường Đại Học Công Nghệ Thông Tin - Học viện Kỹ Thuật Mật Mã
Chuyên ngành Lập trình Windows
Thể loại Bài tập môn học
Định dạng
Số trang 86
Dung lượng 3,22 MB

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

Nội dung

TH Lập trình Windows Chương 4 ™ Định nghĩa hàm Serialize: ™ Trong lớp CChildView , khai báo danh sách các đối tượng CLine: CArray m_arrLines; - Nhả chuột WM_LBUTTONUP: kết thúc thao tác

Trang 1

TH Lập trình Windows Chương 1-2

Bài tập chương 1

1 Viết chương trình hiển thị màn hình như sau:

Hướng dẫn:

1/9

Trang 2

TH Lập trình Windows Chương 1-2

2/9

Trang 3

TH Lập trình Windows Chương 1-2

3/9

Trang 4

TH Lập trình Windows Chương 1-2

4/9

Trang 5

TH Lập trình Windows Chương 1-2

2 Từ chương trình câu 1, thay đổi một số thuộc tính của cửa sổ lần lượt như sau:

5/9

Trang 6

TH Lập trình Windows Chương 1-2

-

3 Lần lượt thay đổi trạng thái cửa sổ như sau:

• Nằm ở giữa màn hình, kích thước 640x480

• Luơn nằm trên các cửa sổ khác

• Khơng thể thay đổi kích thước

• Cửa sổ phĩng to đầy màn hình

Gợi ý: sử dụng các hàm thuộc lớp CWnd: Create, ShowWindow, SetWindowPos

Bài tập chương 2

1 Bài 1

6/9

Trang 7

TH Lập trình Windows Chương 1-2

Gợi ý:

- Sử dụng hàm GetClientRect để lấy kích thước vùng Client

- Chia vùng Client thành 4 phần bằng nhau, mỗi phần là một hình chữ nhật

- Sử dụng các đối tượng CPen, CBrush và các hàm Ellipse, Chord, Pie, RoundRect, SetTextColor, SetBkMode, DrawText

Ví dụ: hàm vẽ Ellipse:

7/9

Trang 9

TH Lập trình Windows Chương 1-2

3 Bài 3

9/9

Trang 10

TH Lập trình Windows Chương 3

Bài tập chương 3

1 Dùng MFC AppWizard xây dựng ứng dụng sau:

Chuỗi Hello!MFC cĩ thể chuyển động theo các phương:

- Sang trái : khi nhấn phím ←

- Sang phải: khi nhấn phím →

- Đi lên: khi nhấn phím ↑

- Đi xuống: khi nhấn phím ↓

- Phím S: Start – Stop chuyển động

Gợi ý:

- Sử dụng MDC và các hàm LoadBitmap, StretchBlt để load ảnh nền

- Tạo font chữ, sử dụng các hàm SetTextColor, DrawText để xuất chuỗi

Hello!MFC

- Chuỗi Hello!MFC nằm trong một frame hình chữ nhật (CRect) Để thay đổi vị trí chuỗi, chỉ cần di chuyển frame Chú ý: Để tính tốn kích thước frame trên, sử dụng hàm GetTextMetrics kết hợp với độ dài chuỗi

- Khai báo hàm xử lý sự kiện WM_TIMER Trong hàm OnTimer, cập nhật lại vị trí frame tuỳ theo chiều di chuyển đang được chọn

- Khai báo hàm xử lý sự kiện WM_KEYDOWN Trong hàm OnKeyDown, cập nhật lại chiều chuyển động dựa vào giá trị các phím được nhấn

1/7

Trang 12

TH Lập trình Windows Chương 3

- Xử lý sự kiện nhấn phím:

- Xử lý sự kiện WM_TIMER:

3/7

Trang 13

o ‘R’, ‘G’, ‘B’: nét vẽ chuyển sang màu tượng ứng (Red, Green, Blue)

o Phím ‘A’, ‘C’: thay đổi con trỏ chuột (tùy ý), phím ‘E’: về dạng mặc định

o Phím ↑, ↓: thay đổi độ dày nét vẽ ( 1 ≤ nét vẽ ≤ 20)

o Phím Delete: xóa màn hình

- Khi click chuột trên thanh tiêu đề: thay đổi tiêu đề cửa sổ

Gợi ý:

- Để thực hiện được thao tác vẽ, sử dụng các hàm xử lý sự kiện nhấn chuột

(WM_LBUTTONDOWN) để bắt đầu chọn vị trí vẽ và di chuyển chuột

(WM_MOUSEMOVE ) thực hiện thao tác vẽ

4/7

Trang 14

TH Lập trình Windows Chương 3

- Thay đổi con trỏ chuột và độ dày nét vẽ thực hiện trong hàm OnKeyDown

- Để thay đổi tiêu đề khi click trên thanh tiêu đề cửa sổ, xử lý sự kiện

WM_NCLBUTTONDOWN của lớp CmainFrame

Trang 15

TH Lập trình Windows Chương 3

//Nhấn phím

//Thay đổi con trỏ chuột

6/7

Trang 16

TH Lập trình Windows Chương 3

//Nhấn nút trái chuột ngoài vùng client

7/7

Trang 17

TH Lập trình Windows Chương 4

Bài tập chương 4

Dùng MFC AppWizard xây dựng ứng dụng vẽ các đoạn thẳng như sau:

Yêu cầu: Dùng chuột rê vẽ các đoạn thẳng, cho phép lưu vào file có tên Lines.dat

- Chúc năng bàn phím:

™ Thay đổi màu vẽ:

Phím R: đỏ Phím G: màu xanh lá Phím B: màu xanh dương

™ Lưu vào file: phím S

™ Load từ file: phím L

™ Xoá màn hình: phím C Gợi ý:

™ Xây dựng lớp CLine kế thừ từ CObject:

1/2

Trang 18

TH Lập trình Windows Chương 4

™ Định nghĩa hàm Serialize:

™ Trong lớp CChildView , khai báo danh sách các đối tượng CLine:

CArray <CLine*,CLine*> m_arrLines;

- Nhả chuột (WM_LBUTTONUP): kết thúc thao tác vẽ đoạn thẳng

™ Để lưu và load danh sách các đoạn thẳng đã vẽ, trong lớp CChildView, khai báo

và định nghĩa hàm Serialize:

™

2/2

Trang 19

THỰC HÀNH BÀI DRAWS PHẦN I:

1) Tạo ứng dụng SDI:

Trang 24

2) Tạo class CShape

Trang 26

Trong file Shape.h, khai báo marco và các biến như sau:

Khai báo hàm Draw:

Trang 27

Định nghĩa hàm Draw:

void CShape::Draw(CDC *pDC)

{

CBrush br (clrBkColor);

CBrush *pOldBr = pDC->SelectObject(&br);

CPen pen(PS_SOLID, nPenWidth, clrBorderColor);

Trang 28

CPen *pOldPen =pDC->SelectObject(&pen);

pDC-> Ellipse (pLeftTop.x, pLeftTop.y, pRightBottom.x, pRightBottom.y);

break; case 2://ve hinh chu nhat

pDC-> Rectangle (pLeftTop.x, pLeftTop.y, pRightBottom.x, pRightBottom.y);

break; }

Khai báo hàm ảo Serialize:

Bổ sung marcro IMPLEMENT_SERIAL(CShape, CObject,1)trên hàm Serialize và định nghĩa hàm này như sau:

Trang 29

IMPLEMENT_SERIAL(CShape, CObject,1)

void CShape::Serialize(CArchive& ar)

{

if (ar.IsStoring())

{ // storing code (luu du lieu)

ar << nShape << clrBkColor << clrBorderColor << nPenWidth << pLeftTop << pRightBottom;

}

else

{ // loading code (load du lieu)

ar >> nShape >> clrBkColor >> clrBorderColor >> nPenWidth >> pLeftTop >> pRightBottom;

}

}

3) Trong class CDrawsDoc, khai báo các biến:

Trong hàm Serialize của lớp CDrawsDoc, bổ sung đoạn code sau:

Trang 30

Trong hàm OnNewDocument, khởi tạo giá trị ban đầu cho các biến:

4) Chuyển sang class CDrawsView, khai báo các biến:

Trang 31

Tạo hàm xử lý sự kiện WM_CREATE:

Trong hàm OnCreate, tạo memdc:

Trang 32

Trong hàm OnDraw:

Tạo hàm xử lý sự kiện WM_LBUTTONDOWN:

Trang 33

Tạo hàm xử lý sự kiện WM_MOUSEMOVE:

Tạo hàm xử lý sự kiện WM_ERASEBKGND, chặn sự kiện xóa view:

Chạy thử ứng dụng, dùng chuột vẽ các ellipse màu đỏ, đóng

và save thành file

Mở lại ứng dụng, mở file đã lưu, xem kết quả

Trang 34

PHẦN II: Bổ sung Dialog option cho phép lựa chọn các thuộc tính

Trang 35

Double click vào vùng trống trên hộp thoại, tạo class gắn với hộp thoại như sau:

2) Tạo class CColorStatic kế thừa từ class CStatic để hiển thị màu chữ, màu nền cho đối tượng Static:

Trang 36

Trang 37

Để thấy được class mới tạo trong cửa sổ Class View, khai báo file tiêu đề colorstatic.h trên phần khai báo lớp COptionDlg như sau:

Trang 41

4) Chuyển sang tab ResourceView, chọn Menu IDR_MAINFRAME, bổ sung thêm menu Tools, Options:

Trang 42

Click phải trên menu Options:

Trang 43

5) Trong class COptionDlg, khai báo các biến sau:

Thêm hàm ảo OnInitDialog vào class COptionDlg:

Trang 44

Tạo hàm xử lý sự kiện cho hai control Static:

Trang 46

Thiêt lập thuộc tính Notify cho hai control Static này là True:

Trang 47

Viết code cho hai hàm xử lý sự kiện vừa tạo:

6) Cuộn lên trên đầu file CDrawsDoc.cpp, khai báo tiêu đề file

“OptionDlg.h”:

Viết code xử lý sự kiện menu:

Trang 48

Kết thúc

Trang 49

TH Lập trình Windows chương 5 Dialog - Controls

HƯỚNG DẪN THỰC HÀNH CHƯƠNG 5

2 Dialog và các Controls

2.1 Bài tập 1 (FontView)

Bước 1: Tạo project (Dialog base), thiết kế giao diện theo yêu cầu

Bước 2: Khai báo các biến thành viên ứng với các controls :

Loại control ID Caption Biến đối tượng

ListBox IDC_LIST_FONT m_lbFonts

Editbox IDC_CONTENT m_editContent

CheckBox IDC_CHECK_TRUETYPE m_chkCheckbox

CheckBox IDC_B m_chkB

CheckBox IDC_I m_chkI

CheckBox IDC_U m_chkU

Static IDC_STATIC_FONTVIEW m_staticFontView

1/19

Trang 50

TH Lập trình Windows chương 5 Dialog - Controls

Bước 3: Tạo menu:

Bước 4:

Khai báo và định nghĩa hàm xử lý font :

int CALLBACK EnumFontfamProc (LPENUMLOGFONT lpelf,

LPNEWTEXTMETRIC lpntm, DWORD nFonttype, long lParam);

Bước 5: Trong lớp CFontViewDlg, khai báo và định nghĩa các hàm

2/19

Trang 51

TH Lập trình Windows chương 5 Dialog - Controls

//Hàm liệt kê và hiển thị font

//Hàm tạo và chọn font dựa vào các lựa chọn

3/19

Trang 52

TH Lập trình Windows chương 5 Dialog - Controls

//Hàm kiểm tra có đoạn văn bản nào đang được chọn trong EditBox

//Hàm cập nhật trạng thái menu

4/19

Trang 53

TH Lập trình Windows chương 5 Dialog - Controls

//Tạo danh sách các cỡ chữ trong ComboBox

Bước 5: Trong lớp CFontViewDlg, khai báo và định nghĩa các hàm xử lý sự kiện

//Trong OnInitDialog

// Thay đổi lựa chọn font trong ListBox

//Check – uncheck ComboBox True Type

5/19

Trang 54

TH Lập trình Windows chương 5 Dialog - Controls

// Sự kiện từ menu

6/19

Trang 55

TH Lập trình Windows chương 5 Dialog - Controls

//sự kiện click vào menu -> cập nhật trạng thái menu

//Xử lý sự kiện phím

//Check – uncheck các CheckBox B, I, U

//Thay đổi lựa chọn trên ComboBox Size

7/19

Trang 56

TH Lập trình Windows chương 5 Dialog - Controls

2.2 Bài tập 2 (ColorText)

Bước 1: Tạo project (Dialog base), thiết kế giao diện theo yêu cầu

Bước 2: Tạo các lớp CColorStatic kế thừa từ lớp cơ sở CStatic và CiconListBox kế thừa từ lớp

cơ sở CListBox (xem trong slides)

Bước 3: Trong lớp CcolorTextDlg khai báo các biến :

Bước 4: Khai báo các biến thành viên ứng với các controls :

Loại control ID Caption Biến đối tượng

CColorStatic IDC_STATIC_TEXT Advanced

Control Programming

m_staticText

CIconListBox IDC_LIST_ICON m_lbIcon

Bước 5: Khai báo các và định nghĩa các hàm xử lý sự kiện :

//Trong OnInitDialog

8/19

Trang 57

TH Lập trình Windows chương 5 Dialog - Controls

//Trong OnPaint

// Các sự kiện từ Radio Button, ListBox

9/19

Trang 58

TH Lập trình Windows chương 5 Dialog - Controls

10/19

Trang 59

TH Lập trình Windows chương 5 Dialog - Controls

2.3 Bài tập 3 (SampleEditor)

Bước 1: Tạo project (Dialog base), thiết kế giao diện theo yêu cầu

ListBox

EditBox

CheckBoxComboBo

11/19

Trang 60

TH Lập trình Windows chương 5 Dialog - Controls

Bước 2: Xây dựng các lớp đáp ứng yêu cầu thiết kế giao diện

• ComboBox hiển thị màu sắc:

12/19

Trang 61

TH Lập trình Windows chương 5 Dialog - Controls

• ListBox hiển thị màu cho text: Tạo lớp CColorListBox kế thừa từ lớp cơ sở CListBox:

//Thêm một chuỗi vào ListBox với màu text là cColor

// Thiết lập kích thước cho mỗi item

13/19

Trang 62

TH Lập trình Windows chương 5 Dialog - Controls

// Vẽ lại ListBox

14/19

Trang 63

TH Lập trình Windows chương 5 Dialog - Controls

• Lớp CEditColor : kế thừa từ lớp cơ sở CEdit, thêm các chức năng chọn màu văn bản,

màu nền

//File EditColor.h

15/19

Trang 64

TH Lập trình Windows chương 5 Dialog - Controls

//File EditColor.cpp

16/19

Trang 65

TH Lập trình Windows chương 5 Dialog - Controls

Bước 3: Khai báo các biến thành viên ứng với các controls :

Loại control ID Caption Biến đối tượng

ComboBox IDC_COMBOCOLOR m_cbColor

(COwnerDrawComboBox)

ListBox IDC_FONTLIST m_lbFonts

(CColorListBox) Editbox IDC_CONTENT m_editContent

(CEditColor)

Bước 4:

// file SimpleEditor.h

Khai báo và định nghĩa hàm xử lý font :

int CALLBACK EnumFontfamProc (LPENUMLOGFONT lpelf,

LPNEWTEXTMETRIC lpntm, DWORD nFonttype, long lParam);

//file SimpleEditor.cpp

17/19

Trang 66

TH Lập trình Windows chương 5 Dialog - Controls

18/19

Trang 67

TH Lập trình Windows chương 5 Dialog - Controls

//Trong hàm OnInitDialog()

19/19

Trang 68

TH Lập trình Windows chương 5 Kiến trúc Documents/Views – Dialog, Property Sheets

HƯỚNG DẪN THỰC HÀNH CHƯƠNG 5

3 Kiến trúc Documents/Views

3.1 SdiSquares

Bước 1: Tạo ứng dụng SDI với project name: SdiSquares

Bước 2: Thiết kế lại menu

Bước 3: Trong lớp CSquaresDoc:

ID_COLOR_RED Red ID_COLOR_YELLOW Yellow ID_COLOR_GREEN Green ID_COLOR_CYAN Cyan ID_COLOR_BLUE Blue ID_COLOR_WHITE White

• Khai báo hai biến

COLORREF m_clrCurrentColor; // màu tô hiện tại

COLORREF m_clrGrid[4][4]; // màu tô trong các ô

• Xây dựng các hàm:

// Đặt giá trị màu (color) cho ô thứ [i][j]

// Báo tài liệu đã được thay đổi, cập nhật các view

void CSquaresDoc::SetSquare(int i, int j, COLORREF color) {

ASSERT (i >= 0 && i <= 3 && j >= 0 && j <= 3);

m_clrGrid[i][j] = color;

SetModifiedFlag (TRUE);

UpdateAllViews (NULL);

}

//Lấy giá trị màu của ô thứ [i][j]

COLORREF CSquaresDoc::GetSquare(int i, int j)

• Khởi tạo giá trị các biến trong hàm OnNewDocument()

for (int i =0; i<4; i++)

for (int j=0; j<4; j++)

m_clrGrid[i][j] = RGB (255, 255, 255);

1

Trang 69

TH Lập trình Windows chương 5 Kiến trúc Documents/Views – Dialog, Property Sheets

m_clrCurrentColor = RGB (255, 0, 0);

• Khai báo các hàm xử lý sự kiện ON_COMMAND,

ON_UPDATE_COMMAND_UI cho các menu ID_COLOR_RED

Bước 4: Trong lớp CSquaresView:

• Thực hiện thao tác vẽ trong hàm OnDraw

CSquaresDoc* pDoc = GetDocument();

COLORREF color = pDoc->GetSquare (i, j);

CBrush brush (color);

int x1 = (j * 100) + 50;

int y1 = (i * 100) + 50;

int x2 = x1 + 100;

int y2 = y1 +100;

CRect rect (x1, y1, x2, y2);

pDC->FillRect (rect, &brush);

// vẽ các đường thẳng theo phương ngang

for (int y=50; y<=450; y+=100) {

pDC->MoveTo (50, y);

2

Trang 70

TH Lập trình Windows chương 5 Kiến trúc Documents/Views – Dialog, Property Sheets

pDC->LineTo (450, y);

}

• Khai báo hàm xử lý sự kiện khi nhấn nút trái chuột

if (point.x >= 50 && point.x <= 450 && point.y >= 50 && point.y <= 450) {

int i = (point.y-50)/100;

int j = (point.x - 50) / 100;

CSquaresDoc* pDoc = GetDocument ();

COLORREF clrCurrentColor = pDoc->GetCurrentColor (); pDoc->SetSquare (i, j, clrCurrentColor);

Trang 71

TH Lập trình Windows chương 5 Kiến trúc Documents/Views – Dialog, Property Sheets

Bước 3: Xây dựng lớp CEllipse

class CEllipse : public CObject

void SetBorderColor(COLORREF clrBorderColor);

void SetFillColor(COLORREF clrFillColor);

void SetPenWidth(int nPenWidth);

CPen NewPen, *pOldPen = NULL;

CBrush NewBrush, *pOldBrush = NULL;

if(m_bThick)

NewPen.CreatePen(PS_SOLID, 5, m_clrBorderColor); else

NewPen.CreatePen(PS_SOLID, 0, m_clrBorderColor);

NewBrush.CreateSolidBrush(m_clrFillColor);

pOldPen = pDC->SelectObject(&NewPen);

4

Trang 72

TH Lập trình Windows chương 5 Kiến trúc Documents/Views – Dialog, Property Sheets

else

{

ar >>

m_P1>>m_P2>>m_clrFillColor>>m_clrBorderColor>>m_bThick; }

}

Bước 4: Trong lớp CMDIDrawEllipseDoc:

• Khai báo các biến:

COLORREF m_clrBkColor, m_clrBorderColor;

Trang 73

TH Lập trình Windows chương 5 Kiến trúc Documents/Views – Dialog, Property Sheets

m_clrBkColor = RGB (255, 0, 0);

m_clrBorderColor = RGB(255,255,0);

m_bThick=FALSE;

• Khai báo các hàm xử lý sự kiện ON_COMMAND,

ON_UPDATE_COMMAND_UI cho các menu

• Xử lý việc lưu và lấy giá trị các biến trong hàm Serialize

if (ar.IsStoring())

{

ar<<m_clrBkColor<<m_clrBorderColor<<m_bThick; for(int i=0;i<m_Objects.GetSize();i++)

{ CEllipse *pEll=new CEllipse();

Ar >> pEll ;

m_Objects.Add (pEll);

} }

Bước 5: Trong lớp CMDIDrawEllipseView:

• Khai báo các biến:

CDC m_MemDC;

CBitmap m_MemBitmap, *m_pOldBitmap;

• Khai báo và định nghĩa hàm

int MaxX = ::GetSystemMetrics(SM_CXSCREEN);

int MaxY = ::GetSystemMetrics(SM_CYSCREEN);

//Tao ra MemDC tuong thich voi dc cua man hinh

m_MemDC.CreateCompatibleDC(&dc);

6

Trang 74

TH Lập trình Windows chương 5 Kiến trúc Documents/Views – Dialog, Property Sheets

//tao doi tuong CBitmap(kich thuoc MaxX,MaxY) tuong

thich voi dc man hinh

m_MemBitmap.CreateCompatibleBitmap (&dc,MaxX,MaxY);

// Dua doi tuong bitmap m_MemBitmap vao m_MemDC

m_pOldBitmap=m_MemDC.SelectObject(&m_MemBitmap); return 0;

}

• Thực hiện thao tác vẽ trong hàm OnDraw

CMDIDrawEllipseDoc* pDoc = GetDocument();

• Khai báo hàm xử lý sự kiện khi nhấn nút trái chuột

CMDIDrawEllipseDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDoc->SetEllipse (point);

• Khai báo hàm xử lý sự kiện khi di chuyển chuột

CMDIDrawEllipseDoc* pDoc = GetDocument();

• Khai báo hàm xử lý sự kiện khi nhả nút trái chuột

CMDIDrawEllipseDoc* pDoc = GetDocument();

Ngày đăng: 16/04/2014, 14:23

TỪ KHÓA LIÊN QUAN

w