Tải bản đầy đủ (.doc) (33 trang)

thuyết mình chương trình.doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (168.4 KB, 33 trang )

Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
CHƯƠNG III : THUYẾT MINH CHƯƠNG TRÌNH
I- TỔNG QUAN VỀ CHƯƠNG TRÌNH :
1- Vấn đề đặt ra cho chương trình :
Nghiên cứu để thiết kế hệ thống chương trình tạo hoa văn.
2- Giải quyết chương trình :
- Để có thể thiết lập hệ thống chương trình tạo hoa văn pattern chúng em xây
dựng chương trình từ các cung vẽ đơn lẻ. Các cung vẽ này sẽ đựơc sắp xếp lại
với nhau tạo thành một hoa văn đẹp mắt.
- Khi nói đến đồ họa không thể không nhắc đến màu sắc, màu sắc sẽ làm tô
điểm thêm hình vẽ. Tuy nhiên màu sắc thể hiện ở mỗi con người chúng ta đều
khác nhau cho nên chương trình của chúng em không những cung cấp mầu sắc
có sẵn mà còn cho phép người sử dụng những mầu tự đònh nghóa.
- Trong quá trình thao tác vẽ khả năng sai xót từ người sử dụng là không thể
tránh khỏi. Do đó chương trình cho phép người sử dụng có thể thêm, xóa, sửa,
thay đổi những thông số cho phù hợp.
- Một chức năng nữa không thể thiếu đựơc là những thành quả có được từ quá
trình vẽ. Chính vì vậy chương trình cho phép người sử dụng có thể in ấn, hoặc
lưu trữ những sản phẩm sau khi vẽ. Những hình ảnh sau khi lưu cũng có thể mở
ra sửa chữa lại.
- Chương trình phải có khả năng giao tiếp tốt với người sử dụng thông qua chuột
và bàn phím.
- Chương trình được thiết kế phải có tính mở, bố cục rõ ràng, các lớp đối tượng
quản lý một cách hệ thống, chặt chẽ để tạo dễ dàng cho sự mở rộng hệ thống
và tuân theo các nguyên tắc cơ bản về lập trình.
- Chương trình phải có một giao diện dễ sử dụng, giúp cho quá trình thao tác
được nhanh chóng và hiệu quả.
- Trang 34 -
Color
Help


Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
II- GIAO DIỆN VÀ CÁCH SỬ DỤNG CHƯƠNG TRÌNH:
A- Giao diện chương trình:
Chúng em sẽ trình bày giao diện về chương trình theo mô hình như sau :
Chương trình này có giao diện giống như bao chương trình ứng dụng khác
chạy trên môi trường Windows. Nó gồm có một hệ thống Menu, thanh Toolbar,
thanh Status Bar, và một vùng vẽ có thanh cuộn ngang và thanh cuốn dọc để cho
người sử dụng di chuyển trên vùng vẽ, để thực hiện các thao tác vẽ một cách dễ
dàng.
- Trang 35 -
Color
Help
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
1 - Hệ thống Menu:
Menu chương trình gồm có các mục thành phần chính sau:
1.1- Menu File:
+ New: Mở một trang vẽ mới, khi user không muốn vẽ trên trang hiện hành
nữa. (Dùng bàn phím có thể bấm tổ phím Ctrl + N).
+ Open :Mở một trang vẽ đã có sẵn đã được lưu trên đóa mà user đã tạo ra
trước đó. (Hoặc dùng phím Ctrl + O).
+ Close :Đóng trang vẽ hiện tại mà user đang dùng.
+ Save :Lưu trang vẽ hiện hành lên đóa.(Dùng phím Ctrl + S)
+ Save As :Lưu trang vẽ hiện hành lên đóa được quyền đặt tên file lại.
+ Print :In trang vẽ hiện hành ra máy in.
+ Print Preview : Xem trước số trang in.
+ Print Setup : Thiết lặp các thuộc tính cho máy in và trang in.
+ Recent File : Mở lại các file trang in đã mở trước .
+ Exit : Thoát khỏi ứng dụng. Trở về màn hình Windows.

1.2 - Menu Edit:
+ Cut :Cắt hình vẽ đang được chọn, lưu vào Clipboar(Dùng Ctrl + X)
+ Copy :Sao chép hình vẽ, hoặc một số hình vẽ đang được chọn, lưu vào
Clipboard.( Dùng Ctrl + C )
+ Paste :Đưa hình vẽ đã có trong Clipboard dán vào trang vẽ hiện hành.
( Dùng Ctrl + V)
+ Delete : Xóa hình vẽ đang được chọn.( Dùng phím Delete)
- Trang 36 -
View
File
Draw
Color
View
Window
Help
Edit
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
+ Select All : Chọn tất cả hình vẽ đang có trên trang vẽ hiện hành. ( Dùng
Ctrl + A)
1.3 -Menu Draw:
+ HillBert : Vẽ cung HillBert đã được nêu trước đó.
+ PrimeRosette : Vẽ cung PrimeRosette. (hay còn gọi là hoa hồng nguyên
tố)
+ C_Curve : Vẽ cung C (giống hình chữ C)
+ Cung Rồng : Vẽ hình cung Rồng .(Cũng tương tự như cung C nhưng hướng
của nó thay đổi khác so với cung C)
+ PolySpirals : Vẽ cung PolySpiral. Gồm có:
• Cung hình sao.
• Cung hình bát giác.

• Cung hình xoáy tứ giác.
• Cung hình xoáy ngũ giác.
• Cung hình các tia.
1.4 - Menu Color:
+ LineColor : Màu của nét vẽ ( bút vẽ) của đối tượng vẽ đang được chọn
(gồm một hộp màu gồm 48 màu đònh sẵn và 16 màu tự pha chế tùy ý để user tự
chọn).
+ FillColor : Màu nền tô của đối tượng (màu dùng cho cọ vẽ) đang được
chọn .(Hộp màu cũng tương tự như LineColor).
Tóm lại : Cả FillColor và LineColor đều có hộp màu như sau:
- Trang 37 -
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
1.5- Menu View:
+ ToolBar : Dùng để thể hiện hoặc không thể hiện thanh toolbar.
+ Status Bar : Dùng để thể hiện hoặc không thể hiện thanh status bar.
+ Paper Color : Dùng để đònh nghóa màu nền của trang vẽ (cho user tự chọn
màu nền.
1.6 -Menu Windows:
+ New Window : Tạo một cửa sổ window mới.
+ Cascade : Thể hiện các window theo cửa sổ tầng .
+ Tile : Thể hiện các window theo kiểu lát gạch.
+ Arrange : Sắp xếp các window theo thứ tự .
+ Danh sách các window đã được mở ra trước đó.
1.7- Menu Help:

- Trang 38 -
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
2 - Thanh ToolBar :

Thanh ToolBar gồm có các nút nhấn theo thứ tự sau:
• Nút New
• Nút Open
• Nút Save
• Nút Cut
• Nút Copy
• Nút Paste
• Nút Print
• Nút About
• Nút Help
• Nút chọn đối tượng ( Select an Object).
• Nút vẽ cung PolySpiral
• Nút vẽ cung Rosette (hoa hồng nguyên tố)
• Nút vẽ cung Poly ( từ tam giác đến n giác )
• Nút vẽ cung Dragon (cung Rồng)
• Nút vẽ cung Ccurve (cung C)
• Nút vẽ cung HilBert.
3 - Thanh Statusbar :
Thanh này dùng để thể hiện tác vụ của Menu hoặc Toolbar khi người sử
dụng nhấn trên Menu hoặc Toolbar đã chọn.
Ví dụ khi ta chọn nút New trên thanh Toolbar thì thanh Status Bar sẽ hiện ra
câu thông báo là :” Create a new document “
- Trang 39 -
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
B- Cách sử dụng chương trình:
1- Vẽ ra màn hình :
Để vẽ ra một hình nào đó trên Viewport (danh sách hình trên menu Draw).
Đầu tiên người sử dụng kích chuột vào item nào mà mình muốn chọn trong menu
Draw, hoặc nhấp lên nút biểu tượng trên thanh Toolbar. Tiếp theo di chuyển chuột

đến vùng vẽ ( trang vẽ) và click trái chuột, một hộp đối thoại dialog hiện ra yêu
cầu người sử dụng nhập vào một số thông số cần thiết có liên quan đến việc vẽ
hình. Sau khi nhập vào đầy đủ các yêu cầu thông số về đối tượng hình vẽ đó nhấp
nút OK thì đối tượng hình vẽ được vẽ ra trên vùng làm việc.
Ví dụ : Muốn vẽ cung PrimeRosette ( hoa hồng nguyên tố ) thì chúng ta kích
chuột vào menu Draw, chọn tiếp item PrimeRosette bằng cách nhấp nút chuột trái
lên item PrimeRosette( hoặc chọn biểu tượng Prime Rosset trên thanh Toolbar), di
chuyển chuột đến vùng vẽ đồng thời click trái chuột xuống thì hộp đối thoại
dialog hiện lên với yêu cầu nhập hai thông số là:
• Nhập bán kính : tại khung Edit (Ban Kinh).
• Nhập bậc ( là số nguyên tố ) : tại (So Bac).
Sau đó nếu không có gì thay đổi thì nhấp nút OK, cung PrimeRosette được hiện
ra trên vùng làm việc tại vò trí mà chúng ta click chuột xuống, nếu nhấn
CANCEL tức hủy bỏ quá trình vẽ (vò trí click chuột là tâm của hình).
Việc thực hiện vẽ các đối tượng hình vẽ khác cũng tương tự như vậy.
2- Chọn đối tượng - hiệu chỉnh - sửa đổi :
- Chọn đối tượng : Khi trên trang vẽ đã có nhiều đối tượng đã được vẽ (và người
sử dụng đang ở chế độ vẽ) mà muốn ngưng việc vẽ để chọn đối tượng nào đó mà
mình muốn thao tác thì trước tiên phải chọn đối tượng bằng cách vào menu Draw
chọn item Select ( hoặc nhấp lên biểu tượng có hình dạng mũi tên trên thanh
Toolbar). Sau đó click chuột trái vào đối tượng nào mình muốn chọn. Tiếp theo
thì người sử dụng có thể thực hiện các thao tác như : sao chép, di chuyển, co dãn,
cắt dán .
- Hiệu chỉnh - sữa đổi: Chỉ hiệu chỉnh trên từng đối tượng riêng lẻ tại một thời
điểm, chẳng hạn như :số đỉnh, bán kính (của hồng nguyên tố), bậc (còn gọi là cấp
đệ quy của cung như : HilBert, cung Rồng, cung C, cung Polysprials). Để thực
hiện việc hiệu chỉnh – sữa đổi thì ta tiến hành như sau:
Bước 1 : Chọn đối tượng cần hiệu chỉnh (như đã trình bày ở trên).
- Trang 40 -
Sơ đồ luồng chương trình

Các biến cố
CDemoTool
CDemoView
CDemoObj
CDemoDoc
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
Bước 2 : Quay lên thanh Toolbar chọn đúng nút biểu tượng của đối tượng
vừa được chọn ở bước 1. (lúc này đối tượng đang ở chế độ được chọn và trên
thanh Toolbar nút biểu tượng bò ấn xuống ).
Bước 3 : Trở lại vùng vẽ và click phải chuột lên đối tượng đã được chọn ở
bước 1 và 2, hộp đối thoại dialog của đối tượng đó hiện lên với các thông số là
các giá trò hiện thời của đối tượng. Nếu đồng ý với các thay đổi vừa được chọn thì
nhấn OK và ngược lại thì nhấp CANCEL.
Ví dụ: Muốn di chuyển cung PrimeRosette trên thì trước tiên ta chọn cung
PrimeRosette bằng cách nhấp trái chuột. Giữ nguyên trạng thái nhấn chuột đồng
thời di chuyển chuột (rê chuột) tới vò trí cần di chuyển đến và thả tay ra.
Còn đối với việc cắt, dán, sao chép thì cũng thực hiện tương tự : đầu tiên ta
chọn đối tượng cần thao tác và chọn các chức năng (cut, copy, paste) trên thanh
ToolBar hoặc trong menu Edit hoặc dùng tổ hợp các phím như đã nêu trong trong
phần menu Edit.
Ngoài chức năng chọn đơn lẻ từng đối tượng hình . Chương trình còn cho
phép người sử dụng chọn cùng lúc nhiều đối tượng hình vẽ bằng cách nhấn giữ
phím <Shift> và nhấn giữ nút trái chuột trên các đối tượng, hoặc có dùng chuột
kéo thành một đường bao hình chữ nhật bao trùm tất cả các đối tượng nào
mình muốn chọn. Hoặc vào Menu Edit chọn Item Select All (Ctrl + A).
3- Thay đổi màu nét vẽ – màu nền:
Để thay đổi màu nét vẽ - màu cọ vẽ thì ta chọn đối tượng hình cần thay
đổi và sau đó chọn menu Color. Chọn tiếp item LineColor (nếu như thay đổi màu
nét vẽ) hoặc chọn FillColor nếu như thay đổi màu cọ vẽ. Ngoài ra ta có thể thay

đổi màu nền của trang vẽ bằng cách vào Menu View chọn item Paper Color, sau
đó chọn màu muốn thay đổi.
Nhấn OK , thì việc thay đổi được thực hiện.
III- TỔ CHỨC CÁC LỚP TRONG CHƯƠNG TRÌNH:
Chương trình được xây dựng bằng App Wizard, một tiện ích tạo ứng dụng tự
động có sẵn của Mirosoft Visual C++ với các lựa chọn theo các bước như sau:
- Bước 1: Chọn MDI ( Multiple Document Interface). Sự lựa chọn này cho phép
chương trình có khả năng giao tiếp.
- Bước 2: Chọn none.
- Bước 3: Chọn Container cho phép nhúng đối tượng từ bên ngoài vào.
- Trang 41 -
Sơ đồ luồng chương trình
Các biến cố
CDemoTool
CDemoView
CDemoObj
CDemoDoc
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
- Bước 4: Chọn Docking toolbar, initial status bar, printing and print preview cho
phép sử dụng toolbar, status bar print preview và máy in.
- Bước 5: Chọn MFC Standard.
- Bước 6: Chọn CScrollView cho phép sử dụng thanh cuốn ngang và thanh cuốn
dọc.
Ngoài những lớp do MFC tạo ra thông qua các bước trên chúng em còn tạo ra
thêm một số lớp để phục vụ cho quá trình vẽ. Đó là các lớp :
- CDemoObj : Lớp này thừa kế từ lớp CObject.
- CDemoTool: Lớp này không có lớp thừa kế.
- Các lớp Dialog: Các lớp này thừa kế từ lớp CDialog.
- Trang 42 -

Sơ đồ luồng chương trình
Người sử
dụng
Các biến cố
CDemoTool
CDemoView
CDemoObj
CDemoDoc
Các lớp Dialog
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
Sau đây chúng em sẽ liệt kê thành phần của từng lớp, và chỉ liệt kê các biến
thành viên và các hàm thành viên do chúng em tạo ra.

1- Lớp CMainframe :
Quản lý toàn bộ Frame của chương trình
2- Lớp CDemoDoc :
Lớp CDemoDoc được dẫn xuất từ lớp CDocument. Có nhiệm vụ quản lý toàn
bộ trang vẽ cũng như danh sách các đối tượng vẽ, mỗi khi có một biến cố như
thêm hình, di chuyển hình, thay đổi kích thước hình, hay sửa đổi hình. Lớp
CDemoDoc có nhiệm vụ vẽ lại toàn bộ trang vẽ và Update vùng Viewport.

• Các biến thành viên :
CDemoObjList m_objects
CSize m_size
COLORREF m_paperColor
• Các hàm thành viên :
CDemoObjList* GetObjects() { return &m_objects; }
const CSize& GetSize() const { return m_size; }
void ComputePageSize();

COLORREF GetPaperColor() const { return m_paperColor; }
CDemoObj* ObjectAt(const CPoint& point);
void Draw(CDC* pDC, CDemoView* pView);
void Add(CDemoObj* pObj);
void Remove(CDemoObj* pObj);
3- Lớp CDemoView :
Lớp này được xuất từ lớp CScrollView. Nhiệm vụ chính của lớp này là xử
lý các biến cố và giao tiếp với ngưới sử dụng. Ví dụ để vẽ một cung người sử
dụng chọn cung cần vẽ rồi click tr chuột, khi này sẽ sinh ra một thông điệp
của Window là WM_ONLBUTTONDOWN, người thiết kế chương trình có
nhiệm vụ đón bắt thông điệp này bằng cách phủ quyết hàm OnLButtonDown
để xử lý các nhu cầu từ việc nhấn nút chuột. Trong trường hợp của chúng em
hàm OnLButtonDown không làm gì nhiều ngoài việc gọi hàm FindTool từ lớp
- Trang 43 -
Sơ đồ thừa kế giữa các lớp
CObject
CDemoObj
CDemoHilber
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
CDemoTool để tìm kiếm xem đối tượng nào được vẽ và gọi hàm
OnLButtonDown từ lớp đó.
Ngoài ra lớp này còn có các hàm lo việc chuyển đổi tọa độ, các hàm xử lý
việc chọn hình vẽ từ ToolBar, các hàm xử lý việc cắt gián và biến lưu trữ các
đối tượng đã chọn để phục vụ cho viêc di chuyển, co giãn hoặc sửa đổi.

• Các biến thành viên :
CDemoObjList m_selection;
BOOL m_bActive;
static CLIPFORMAT m_cfDraw;

static BOOL gtDe;
• Các hàm thành viên :
void DocToClient(CRect& rect);
void DocToClient(CPoint& point);
void ClientToDoc(CPoint& point);
void ClientToDoc(CRect& rect);
void Select(CDemoObj* pObj, BOOL bAdd = FALSE)
void SelectWithinRect(CRect rect, BOOL bAdd = FALSE)
void CloneSelection()
void InvalObj(CDemoObj* pObj)
void Remove(CDemoObj* pObj)
BOOL ObjectAt(const CPoint& point)
void PasteNative(COleDataObject& dataObject)
4- Lớp CDemoObj :
Lớp này được dẫn xuất từ lớp CObject. Nhiệm vụ của lớp này là quản lý
các đối tượng vẽ. Để vẽ ra một cung ngoài những đặc tính chung là hình dáng,
bút vẽ, cọ ve õ….Lớp này còn có các lớp thừa kế từ nó như: CDemoCcurve,
CDemoDragon, CDemoPoly, CDemoPolySpirals và CDemoRosset. Mỗi một
lớp sẽ có các biến, các hàm thành viên riêng cho việc vẽ ra cung đó.
- Trang 44 -
Sơ đồ thừa kế giữa các lớp
CObject
CDemoObj
CDemoHilber
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------

• Các biến thành viên :
CRect m_position
CDemoDoc* m_pDocument

DrawShape Shape
BOOL m_bPen
LOGPEN m_logpen
BOOL m_bBrush
LOGBRUSH m_logbrush
• Kiểu đònh nghóa:
enum TrackerState { normal, selected, active }
• Các hàm thành viên :
int GetHandleCount()
CPoint GetHandle(int nHandle)
CRect GetHandleRect(int nHandleID, CDemoView* pView)
HCURSOR GetHandleCursor(int nHandle)
void SetLineColor(COLORREF color)
void SetFillColor(COLORREF color)
virtual void Draw(CDC* pDC)
void DrawTracker(CDC* pDC, TrackerState state)
virtual void MoveTo(const CRect& positon, CDemoView* pView = NULL)
- Trang 45 -
CDemoPoly
Sơ đồ thừa kế giữa các lớp
CObject
CDemoObj
CDemoPolySpirals
CDemoCcurve
CDemoCcurve
CDemoDragon CDemoRosset
CDemoHilber
Luận văn tốt nghiệp
----------------------------------------------------------------------------------------------------
int HitTest(CPoint point, CDemoView* pView, BOOL bSelected)

virtual BOOL Intersects(const CRect& rect)
virtual void MoveHandleTo(int nHandle, CPoint point, CDemoView*
pView = NULL)
virtual CDemoObj* Clone(CDemoDoc* pDoc = NULL)
void Invalidate()
void MakeNGon(CDC* pDC,CPoint point1[100],CPoint point2[100],
int vertice)
void MakeNGon(int radius, int start_angle,CPoint cent,CPoint point[100],
int vertice)
a- Các biến và hàm thành viên lớp CDemoPolySprials :
- Biến :
CPoint p_Tam
int p_BanKinh
int p_SoDinh
- Hàm:
virtual void Serialize(CArchive& ar)
virtual CDemoObj* Clone(CDemoDoc* pDoc=NULL)
virtual BOOL Intersects(const CRect& rect)
virtual void MoveHandleTo(int nHandle,CPoint point,CDemoView*
pView=NULL)
void RecalcBounds(CDemoView* pView=NULL)
virtual void MoveTo(const CRect& position,CDemoView* pView=NULL)
void PolySpirals(CDC* pDC,int radius, CPoint cent,int start_angle, int
vertice)
void DrawNGon(CDC* pDC, CPoint point1[100],CPoint point2[100],
int vertice)
virtual void Draw(CDC* pDC)
b- Các biến và hàm thành viên lớp CDemoPoly :
- Biến :
CPoint pl_Tam

int pl_BanKinh
int pl_Goc
int pl_SoDinh
- Hàm:
- Trang 46 -

×