Hướng dẫn lập trình VC 6++
Trang 1Mục lục
Phần 1 Tổng quan về lập trình hướng đối tượng
Phần 2.Visual C++ 6.0
2.3.Các thao tác cơ bản với Menu và Toolbar của VC++ 6.0 172.4.Các môi trường xây dựng ứng dụng trong VC++ 6.0 19
Phần 3 Hướng dẫn lập trình VC++6.0
Chương 1.Các thao tác với lớp, hàm, biến
3.1.1.Đưa các file có sẵn vào trong chương trình ứng dụng 20
Chương 2.Tạo các menu, toolbar và các thao tác cơ bản
3.2.4 Đẩy một icon lên nút bấm trong ứng dụng 353.2.5.Tạo các ToolTip(chú thích )cho đối tượng 363.2.6.Tác động tới biểu tượng chuột trong ứng dụng 38
Chương 3.Sử dụng font và giờ hệ thống
3.3.1.Lấy font hệ thống viết text và thao tác vẽ lên màn hình 393.3.2.Thiết kế một Dialog riêng đưa nó vào Dialog chính ,cập nhật giờ
Chương 4 Đọc, hiển thị và lưu file text
Chương 6.Giao tiếp máy tính
3.6.1.Các hàm trong VC++ trong giao tiếp máy tính 76
Trang 2Chương 7.VC++ với thiết kế 3D
3.7.3.3.Tạo một ngữ cảnh để tô bóng (Rendering Context ) 102
Chương 8 Đóng gói chương trình ,tạo bộ cài đặt
3.8.1.Thêm thành phần Installshield for Microsoft Visual C++ 6.0 1093.8.2.Các thao tác để đóng gói với InstallShield 110
Chương 9.Thiết kế chương trình mô phỏng điều khiển máy CNC
3.9.3.2.Viết code cho hộp thoại Define Zero Point 129
3.9.3.5.Viết code cho hộp thoại Tool Demension 1313.9.3.6.Viết code cho hộp thoại To Any Point 131
Trang 3LỜI NÓI ĐẦU
Trong sự phát triển ngày càng lớn mạnh của khoa học công nghệ, vấn đề kết hợpcác lĩnh vực điện tử - tin học và cơ khí đang rất được quan tâm Một trong những đềtài thu hút được sự quan tâm của các sinh viên cơ khí đó là sử dụng ngôn ngữ lập trìnhđể tạo ra các ứng dụng điều khiển và mô phỏng quá trình của máy móc Một trongnhững công cụ lập trình hiệu quả và đạt kết quả tốt đó chính là Visual C++, được xâydựng trên nền tảng là ngôn ngữ lập trình hướng đối tượng C++
Trong bản đồ án tốt nghiệp với đề tài là “Hướng dẫn lập trình VC++ 6.0” sẽ trìnhbày những cách thức làm việc hiệu quả và cơ bản với ngôn ngữ lập trình này , kèmtheo đó là các bài minh hoạ
Nội dung của đồ án tốt nghiệp như sau :
-Phần I : Tổng quan về lập trình hướng đối tượng-Phần II : Visual C++ 6.0
-Phần III : Hướng dẫn lập trình
+Chương 1 :thao tác với các hàm, biến
+Chương 2 : tạo menu, toolbar và các thao tác cơ bản +Chương 3 : sử dụng Font và giờ hệ thống
+Chương 4 : đọc, hiển thị và lưu file text
+Chương 5 : sử dụng Active X để đưa âm thanh vào trong ứng dụng +Chương 6 : Giao tiếp máy tính
+Chương 7 : VC++ với thiết kế 3D
+Chương 8 :đóng gói chương trình, tạo bộ cài đặt
+Chương 9 : thiết kế mô phỏng chương trình điều khiển, mô phỏng gia công máy CNC.
Do giới hạn về mặt thời gian cũng như những hạn chế về mặt kiến thức của người viếtnên không thể tránh khỏi những sai sót vì vậy rất mong được sự thông cảm của ngườiđọc
Trong quá trình hoàn thành đề tài ,được sự hướng dẫn tận tình của TS.Bùi Quý Lực ,công việc đã được hoàn thành đúng tiến độ
Xin chân thành cảm ơn tới thầy Bùi Quý Lực
Người thực hiện :
Sinh viên : Lê Văn Đảng
Trang 4Phần I: TỔNG QUAN VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
OOP (Object Oriented Programming ) là ngôn ngữ hiện thực trong đó chương trìnhđược tổ chức như tập hợp những đối tượng hợp tác với nhau, mỗi đối tượng đại diệncho một instance của một vài lớp và những lớp mà chúng là thành viên của một lớpphân cấp thông qua quan hệ thừa kế.
Ba điểm quan trọng trong định nghĩa này là :
1 Đối tượng được dùng như là những khối xây dựng cơ bản của OOP.2 Mỗi đối tượng như là một instance của một số lớp.
3 Các lớp liên quan với nhau thông qua quan hệ thừa kế.
Ta có thể nói một ngôn ngữ là hướng đối tượng nếu và chỉ nếu nó thỏa mãn những yêucầu sau:
- Nó có thể tạo ra những đối tượng là dữ liệu trừu tượng với một giao tiếp của nhữngoperation đã định và một trạng thái ẩn bên trong.
- Những đối tượng có một lớp kết hợp.- Lớp có thể thừa kế thuộc tính từ lớp cha.
Một mô hình mà thiếu một trong những đặc tính trên thì không phải là hướng đốitượng.
1.1 Abstraction ( tính trừu tượng) :
Sự trừu tượng thể hiện những đặc tính cốt yếu của một đối tượng mà những đặc tínhnày dùng để phân biệt đối tượng này với tất cả các loại đối tượng khác và do vậy cungcấp một cách rõ ràng giới hạn ý niệm được ý nghĩa, liên quan đến viễn tượng củangười nhìn.
Trừu tượng tập trung vào cái nhìn bề ngoài của đối tượng và do đó thỏa mãn được cáchành vi chủ yếu của đối tượng riêng biệt từ hiện thực của nó.
Ta có thể có các loại trừu tượng sau:
- Thực thể trừu tượng : một đối tượng mà nó đại diện cho một mô hình hữu dụng của
một miền vấn đề hay thực thể miền giải quyết.
-Operation abstraction (hoạt động trừu tượng ) : một đối tượng mà nó cung cấp một
tập tổng quát của các operation, tất cả các operation thực thi cùng một loại chức năng.
- Máy ảo trừu tượng : một đối tượng mà nó nhóm các hoạt động với nhau, và tất cả
các hoạt động này được sử dụng bởi mức điều khiển cao hơn Hoặc các hoạt động màchúng sử dụng tập hợp các hoạt động của mức thấp hơn.
-Trừu tượng ngẫu nhiên : một đối tượng mà nó đóng gói một tập hợp các hoạt động
mà chúng không có quan hệ lẫn nhau.
Trang 5Một client là bất kì đối tượng nào sử dụng nguồn tài nguyên của đối tượng khác ( gọilà server) Chúng ta có thể biểu thị đặc điểm hành vi của đối tượngbằng cách xem xétnhững dịch vụ mà nó cung cấp cho những đối tương khác, cũng như những hoạt độngmà nó có thể thực thi cho đối tượng khác Quan điểm này buộc chúng ta phải tập trungvào cái nhìn bề ngoài của đối tượng.
Chúng ta gọi toàn bộ tập hợp của các hoạt động mà một client có thể thi hành cho mộtđối tượng, cùng với những câu lệnh hợp lệ mà chúng có thể được gọi là protocol Mộtprotocol biểu thị những cách thức mà một đối tượng có thể hành động và phản ứng, vàdo vậy có thể cấu thành tổng thể bề ngoài tĩnh và động của trừu tượng.
1.2 Encap sulation (sự đóng kín) :
Tính đóng kín là quá trình phân chia các phần tử của một trừu tượng để cấu thành nêncấu trúc và hành vi của chính nó, đóng kín cho phép hoạt động giao tiếp của một trừutượng và hiện thực của nó.
Sự đóng kín là cơ chế liên kết mã và dữ liệu mà nó thao tác, và giữ cho cả 2 được antoàn khỏi sự can thiệp từ bên ngoài và do sử dụng sai Trong ngôn ngữ hướng đốitượng, mã và dữ liệu liên kết với nhau để tạo thành một “hộp đen” độc lập Trong hộpnày là tất cả mã và data cần thiết Khi mã và data liên kết với nhau như thế một đốitượng sẽ được tạo ra Nói cách khác, đối tượng là một dụng cụ hỗ trợ cho sự đóng kín.Trong một đối tượng , mã, data, hoặc cả 2 có thể là private (riêng) của đối tượng đóhay public (chung) Mã hoặc data riêng là thuộc về đối tượng đó và chỉ được truy cậpvới bộ phận của đối tượng Nghĩa là mã hoặc data riêng không thể truy cập bởi cácphần khác của chương trình tồn tại ngoài đối tượng Khi data là chung, các bộ phậnkhác có thể truy cập đến nó mặc dù nó được định nghĩa trong một đối tượng Các phầnchung của một đối tượng dùng để cung cấp một giao diện có điều khiển cho các phầnriêng của đối tượng.
Nói chung, một đối tượng là một biến thuộc kiểu do người sử dụng định nghĩa Mỗilần ta định nghĩa một đối tượng mới, ta tạo ra một loại data mới.
Tính trừu tượng và đóng kín là hai khái niệm : trừu tượng thì tập trung vào những hànhvi có thể quan sát được của đối tượng, còn tính đóng kín tập trung vào hiện thực củahành vi đó Tính đóng kín thường đạt được thông qua che dấu thông tin, tức là quátrình che dấu mọi bí mật của đối tượng mà không đóng góp vào đặc tính thiết yếu củađối tượng đó ,thông thường cấu trúc của đối tượng được che dấu cũng như hiện thựccủa những method của đối tượng.
Đặc biệt các thành viên có thể được đặt vào public, private, hay protected
của lớp Thành viên được khai báo là public thì thấy được đối với mọi client, nhữngthành viên khai báo là private thì hoàn toàn đóng kín, và những thành viên khai báo làprotected thì chỉ thấy với chính lớp của nó và những lớp con của nó C++ cũng còncho phép kí hiệu friend : là lớp cùng hợp tác được phép thấy những phần privated củanhau.
Trang 61.3 Modularity (modun hóa) :
Modularity là tính chất của một hệ thống đã được phân tích thành một tập hợp dính kếtvà ghép lại một cách lỏng lẻo thành những modun.
Việc phân chia chương trình thành những phần riêng lẻ có thể làm giảm độ phức tạp.Ở ngôn ngữ này lớp, đối tượng hình thành cấu trúc luận lý của hệ thống Chúng ta đặtnhững trừu tượng này trong modun để tạo ra những kiến trúc vật lý của hệ thống.Đối với những vấn đề nhỏ, nhà phát triển có thể quyết định vấn đề khai báo tất cả cáclớp và đối tượng trong cùng một gói Ta thường nhóm những lớp vàø đối tượng cóquan hệ trong cùng một modun, và chỉ phơi bày những phần tử mà modun khác cầnthấy Trong các hệ thống lớn, thì nó có quá nhiều modun và thật là khó cho người sửdụng tìm thấy những lớp mà họ cần Hơn nữa , khi quyết định thay đổi hàng trămmodun phải được hiệu chỉnh hoặc biên dịch lại Như vậy, modun hóa đôi khi cũngkhông tốt
Modun phục vụ như là những phần tử và những đơn vị không thể phân chia được củaphần mềm mà có thể sử dụng lại được qua các ứng dụng Nhà phát triển sẽ chọn cáchđóng gói đối tượng thành các modun sao cho chúng thuận tiện để sử dụng lại.
1.4 Hierachy (hệ thống phân cấp) :
Hệ thống phân cấp là một sự sắp xếp theo thứ bậc hay sắp đặt các trừu tượng Có haiphân cấp quan trọng nhất trong một hệ thống phức tạp là : cấu trúc lớp của nó(phâncấp “is a”), và cấu trúc đối tượng của nó ( phân cấp “part of “).
Thừa kế đơn giản: thừa kế là mối quan hệ “ is a “ thừa kế định nghĩa một mối quan hệgiữa các lớp, trong đó một lớp chia sẻ cấu trúc và hành vi đã được định nghĩa trongmột lớp hay nhiều lớp ( tương ứng với thừa kế đơn giản và đa thừa kế ) Do đó thừa kếnhư là sự phân cấp của các trừu tượng, trong đó một lớp con thừa kế một hay nhiềulớp cha.
Đa thừa kế đưa đến một số vấn đề phức tạp cho ngôn ngữ lập trình Những ngôn ngữphải đưa ra hai vấn đề: xung đột giữa tên của các lớp cha khác nhau, và thừa kế đượclập lại nhiều lần Sự xung đột xảy ra khi hai hay nhiều lớp cha cùng cấp cùng chia sẻmột lớp cha chung Và trong trường hợp như vậy, lớp lá có một hoặc nhiều bản saocấu trúc của lớp cha được dùng chung đó Một số ngôn ngữ thì không cho phép thừakế lập lại, một số khác thì chọn hướng khác C++ cho phép người lập trình quyết định:virtual base class (lớp cơ sở ảo ) được dùng để chỉ ra sự dùng chung của cấu trúc lậplại, trong khi đó nonvirtual base class có kết quả là trùng bản sao ở lớp con.
1.5 Kiểm tra kiểu ( typing ) :
Typing là sự tuân theo bắt buộc của lớp đối tượng, như là những đối tượng của các lớpkhác nhau không được thay thế lẫn nhau hoặc chúng có thể thay thế lẫn nhau chỉ theomột cách thức rất hạn chế.
C++ có khuynh hướng kiểm tra kiểu chặt chẽ nhưng ta có thể lờ đi hay cấm kiểm tra.
- Tính đa dạng (polymorphism):
Là tính chất cho phép một tên được dùng cho hai hoặc nhiều mục đích khác nhau cóquan hệ về phương diện kỹ thuật Mục đích của tính đa dạng khi được áp dụng choOOP là cho phép một tên được dùng để chỉ rõ một lớp tác động tổng quát, một tác động cụ thể được xác định bởi loại data Ví dụ, trong C, không có hỗ trợ tính đa dạngnên một tác động giá trị tuyệt đối cần phải có ba hàm khác nhau:abs(), labs(), và
Trang 7fabs( ) Các hàm này tính toán và lần lượt trả về một giá trị tuyệt đối của số nguyên,một số nguyên dài, một giá trị dấu phẩy động Tuy nhiên, trong C++ có đặc tính đadạng nên có hàm abs() Loại data được dùng để gọi hàm xác định loại hàm nào thực sựđược dùng Trong C++ có thể sử dụng một tên hàm cho nhiều mục đích khác nhau.Điều này được gọi là quá tải hàm(function overloading).
Tổng quan hơn khái niệm tính đa dạng là ý tưởng “một giao diện, nhiều phươngpháp” Điều này có nghĩa là có thể thiết kế một giao diện chung cho một nhóm các tácđộng có liên quan Tuy nhiên, tác động cụ thể được thi hành phụ thuộc vào data Ưuđiểm của tính đa dạng là chúng làm giảm tính phức tạp bằng cách cho phép cùng mộtgiao diện được sử dụng để ghi rõ một lớp tác động tổng quát, chính trình biên dịch sẽlựa chọn tác động cụ thể khi áp dụng cho từng trường hợp Là người lập trình ta khôngphải thực hiện sự lựa chọn này bằng tay Ta chỉ cần nhớ và sử dụng giao diện chung.
-Liên kết tĩnh và kiên kết động (Static and Dynamic Binding):
Khái niệm trong typing và static typing liên kết tĩnh là hoàn toàn khác nhau Strongtyping đề cập tới sự nhất quán của kiểu Stactic binding có nghĩa là kiểu của mọi biếnvà biểu thức là cố định vào lúc biên dịch Dynamic binding nghĩa là các kiểu của mọibiến và biểu thức không cho biết cho tới khi chạy chương trình Bởi vì Strong typingvà Dynamic binding là khái niệm độc lập cho nên một ngôn ngữ có thể vừa Strong vàStatic typing.
1.6 Bản chất của đối tượng:
Một đối tượng có trạng thái, hành vi, đặc tính nhân dạng; cấu trúc và hành vi của cácđối tượng giống nhau được định nghĩa trong một lớp chung của chúng, thuật ngữinstance và đối tượng là có thể thay thế lẫn nhau được.
- Trạng thái (state) : của một đối tượng bao gồm tất cả các đặc tính (thường là tĩnh)
của đối tượng trừ đi giá trị hiện tại ( thường là động ) của mỗi đặc tính đó.
-Hành vi (behavior ) : là đối tượng hoạt động và phản ứng như thế nào theo điều kiện
trạng thái của nó thay đổi và message truyền đến.
-Operations (hoạt động) : là một dịch vụ mà một lớp cung cấp cho khách hàng của nó.
Chúng ta thấy rằng một client thường thực thi năm loại opearation đối tượng Ba loạioperation thông thường nhất là :
• Modifier : là operation thay đổi trạng thái của đối tượng Selector: là Operation truy
xuất trạng thái của đối tượng nhưng không làm thay đổi trạng thái của nó.
• Iterrator : là operation cho phép tất cả các phần của một đối tượng được truy xuất
theo một thứ tự đã định nghĩa trước Hai loại operation thông dụng khác cần thiết đểtạo và hủy những instance của một lớp là :
• Constructor :là operation tạo đối tượng và (hoặc) khởi động trạng thái của nó • Destructor :là operation giải phóng trạng thái của một đối tượng và (hoặc) hủy chính
đối tượng đó.
• Indentify(đặc điểm nhận dạng) : indentify là đặc tính của một đối tượng để phân biệt
nó với các đối tượng khác.
1.7 Mối quan hệ giữa các đối tượng
-Links( liên kết) : Link là nối kết vật lý hay ý niệm giữa các đối tượng Một đối tượng
cộng tác với một đối tượng khác thông qua link của nó tới những đối tượng này Hay nói cách khác, một link vó nghĩa là một hợp tác cụ thể qua đó một đối tượng ( client)
Trang 8áp dụng những dịch vụ của đối tượng khác (nhà cung cấp) hoặc qua đó một đối tượngcó thể điều khiển đối tượng khác.
- Một đối tượng có thể đóng các vai trò sau:
• Actor : một đối tượng có thể làm việc trên một đối tượng khác nhưng nó không bao
giờ cho một đối tượng khác làm việc trên nó, thuật ngữ actor và active object có thểthay thế lẫn nhau.
• Server :một đối tượng không bao giờ làm việc trên một đối tượng khác, nó chỉ cho
đối tượng khác làm việc trên nó.
• Agent : một đối tượng vừa làm việc trên đối tượng khác vừa cho đối tượng khác làm
việc trên nó, một đại lý thường được tạo ra để làm công việc cho một actor hay mộtagent khác
• Đối tượng được cung cấp là global đối với client.
• Đối tượng cung cấp là một tham số cho các operation của client.• Đối tượng cung cấp là một phần của đối tượng client.
• Đối tượng cung cấp được khai báo cục bộ trong operation của client.
Khi có multiple thread control, việc truyền thông tin giữa các đối tượng cần xử lý vấnđề multual exclusion trong hệ thống xử lý đồng thời Vấn đề đồng bộ hóa cũng phảixem xét.
-Aggregation : Aggregation có nghĩa là một phân cấp tổng thể / bộ phận, với khả năng
điều khiển từ tổng thể ( còn gọi là aggregate ) tới những bộ phận (được hiểu là nhữngthuộc tính của nó).
1.8 Bản chất của lớp:
-Class (lớp) : là tập hợp của các đối tượng có cùng cấu trúc chung hay hành vi chung.
Một đối tượng đơn giản chỉ là một instance của lớp.
-Interface: của một lớp cho thấy bên ngoài của đối tượng và do đó nhấn mạnh đến vấn
đề trừu tượng trong khi che dấu cấu tr1c và hành vi bên trong.
- Implemention : của môt lớp là cái nhìn bên trong của nó Implemention của một lớp
cơ bản bao gồm tât cả các operation được định nghĩa trong interface Chúng ta chiainterface của lớp thành ba phần:
• Public : là khai báo được truy xuất đến mọi client.
• Protected : là khai báo được truy xuất chỉ chính lớp đó, lớp con của nó, và lớp friend.• Private: là khai báo được truy xuất chỉ chính lớp đó và lớp friend.
1.9 Mối quan hệ giữa các lớp:
Phần lớn ngôn ngữ hướng đối tượng hỗ trợ trực tiếp một vài kết hợp của những quanhệ sau đây:
• Association : gồm có quan hệ một-một, một-nhiều, nhiều-nhiều.
• Inheritance (thừa kế) : là một lớp chia sẽ cấu trúc và (hoặc) hành vi được định nghĩa
bởi một lớp (đơn thừa kế) hoặc nhiều lớp (đa thừa kế).
• Aggregation (kết tập) : quan hệ kết tập giữa các lớp giống như quan hệ kết tập giữa
các đối tượng tượng giữa các lớp đó Đa thừa kế thường bị lẫn lộn với kết tập TrongC++ thừa kế protected hay private dễ dàng bị thay thế bởi kết tập protected hay privatecủa instace của lớp cha, mà không mất tính ngữ nghĩa của nó.
Trang 9Phần 2 VISUAL C++ 6.0
2.1.Cách cài đặt
Visual C++ 6.0 nằm trong bộ Visual Studio,là bộ phần mềm hỗ trợ lập trình trongWindows do hãng Microsoft sáng chế Cách cài đặt bộ phần mềm Visual Studio 6.0Enterpise Edition như sau :
Có thể copy bộ đĩa vào máy và kích hoạt file Setup.exe để cài đặt chương trình,
chương trình sẽ tự khởi động và hiện lên cửa sổ cài đặt như hình dưới đây :
Hình 2.1 – Nhấn Next để tự động cài đặt Visual Studio 6.0Hệ thống tự động cài đặt Java Virtual Machine.
Hình 2.2 – Chương trình đang giải nén các files cài đặt Microsoft VM
Trang 10Hình 2.3- Chương trình yêu cầu khởi động lại máy để cài đặt có hiệu lực, nhấn Yes đểkhởi động lại máy
Sau khi hoàn tất cài đặt Microsoft VM (Java Virtual Machine), tiếp tục cài đặt VisualStudio 6.0
Hình 2.4 – Nhấn Next để cài đặt Visual Studio 6.0 trong cửa sổ cài đăt hiện ra
Trang 11Hình 2.5 – Nhấp dấu chọn vào ô tròn tại dòng “I accept the agreement” để đồng ýđiều khoản sử dụng, sau đó nhấn Next để tiếp tục cài đặt
Hình 2.6– Dòng màu xanh là nơi cài đặt VS 6.0, hãy để mặc định, nhấn Next để tiếptục
Hình 2.7 – Khởi động trình cài đặt, chờ đến khi xuất hiện màn hình cài đặt
Trang 12Hình 2.8– Đánh dấu chọn vào dòng Graphics để được hỗ trợ về đồ họa trong các ứngdụng sau này Chọn xong nhấn Continue.
Hình 2.9– Bỏ dấu chọn tại dòng Register Environment Variables và nhấn OK
Hình 2.10 – Nhấn Yes để tiếp tục
Trang 13Hình 2.11 – Trình cài đặt đang thực hiện cài đặt VS C++6.0
Hình 2.12 – Firewall (tường lửa) của Windows sẽ chặn các ứng dụng lạ, hãy ấnUnblock để mở khóa
Hình 2.13 – Nhấn OK
Trang 14Hình 2.14 – Cài đặt hoàn tất, nhấn Restart Windows để khởi động lại máy
Hình 2.15 – Chọn MSDN để cài đặt (nếu không có thư viện MSDN thì kích vào Exit đểkết thúc cài đặt ).
Trang 15Hình 2.16 Chọn đường dẫn trong ổ cứng (hoặc ổ CD ) chứa thư viện MSDN 2001.
Sau khi kết thúc cài đặt có thể cài thêm Visual AssistX là công cụ hỗ trợ ngữ pháptrong Visual Studio nói chung và Visual C++ Đến đây đã hoàn tất việc cài đặt VisualC++ 6.0.
Trang 162.2.Giao diện chương trình
Dưới đây là giao diện chương trình :
Hình 2.17.Giao diện chương trình VC++ 6.0
*Workspace : có 3 tab lựa chọn trong “vùng chuyển đổi các cây thư mục”
-Class View :hiển thị các cây lớp được sử dụng trong chương trình Class View chính
là nơi quản lý các lớp các hàm một cách nhanh nhất Nó chính là cây thư mục mà lớnnhất là lớp ứng dụng, các nhánh bé hơn là các lớp và chia ra các hàm ta đã sử dụng , bénhất trong cây thư mục này chính là các biến có mặt
-Resource View : Cây thư mục này chứa tất cả những gì liên quan đến phần giao diện
của ứng dụng , là nơi ta chỉnh sửa các thêm bớt các Dialog,các thanh công cụ, icon,các
nút bấm ( Button) hay ListBox, Picture, editbox …
-File View : nó là cây thư mục chứa các File có mặt trong ứng dụng , các file thư viện
thêm vào tạo nên ứng dụng Khi muốn tác động lên đối tượng trong chương trình có
thể tác động trong ClassView hoặc chọn trực tiếp File trong File View để kích hoạt.*Vùng soạn thảo : là vùng hiển thị các nhánh trong các cây thư mục hay chính là hiển
thị nội dung của chúng
*Vùng thông báo : khi biên dịch chương trình các thông báo sẽ hiển thị ở đây, cho ta
biết chương trình có lỗi hay không và cụ thể lỗi ở đâu cũng như nêu ra các nguyênnhân cơ bản gây ra lỗi
Trang 17Hình 2.18 Các Menu và ToolBar trong VC++ 6.0
2.3.Các thao tác cơ bản với Menu và Toolbar của VC++ 6.0
Đối với VC++ 6.0 chúng ta cần quan tâm tới các Menu View, Insert, Project, Debug,Layout và toolbar Control , còn các menu khác cách sử dụng hoàn toàn tương tự như
các phần mềm khác
Menu View : ta quan tâm tới 2 tab Class Wizard (Ctrl+W )có
tác dụng mở ra hộp thoại Class Wizard sử dụng các sự kiện
(Messages) tác động lên đối tượng thông qua các địa chỉ điềukhiển (Control IDs) và các lớp (Class Name) Và tabID=Resource Sybols mở ra hộp thoại
Resource Symbols lưu lại các địa chỉ
của các đối tượng được sử dụng trongứng dụng, ở đây ta có thể thay đổithông số qua tác động “change” xemcách thức nó được sử dụng trong ứng
dụng “View Use” hay tạo mới “New” Khi tạo sự kiện WM_TIMER ta phải
sử dụng các bộ định thời và nên dùnghộp thoại này để tạo các địa chỉ điềukhiển chúng
Hình 2.19.Menu View
Trang 18
Menu Debug : Menu này chứa các lệnh biên dịch
cho ứng dụng
Biên Dịch Chương trình : Ctrl-F7Dịch và liên kết : F7Thực thi : Ctrl+F5Thực thi ở chế độ Debug :F5
Tạo Breakpoint : F9(chạy tiếp bằng cách ấn F5)Nhảy đến vị trí con trỏ (Debug) : Ctrl +F10
Nhảy qua một dòng thực thi : F10Nhảy vào trong 1 hàm : F11Nhảy ra khỏi hàm : Ctrl-F11
Hiển thị Dialog xem thử ngay khi thiết kế :Ctrl+TĐặt thứ tự tab giữa các control : Ctrl +D
Arrange Buttons : để điều chỉnh vị trí các nút bấm
Center in Dialog : để căn chỉnh đối tượng vào giữa giao diện theo chiều ngang
Trang 19(Horizontal) hay theo chiều dọc (vertical )….
Để tác động lên 1 đối tượng ta chỉ cần kích vào đối tượng rồi chọn thao tác, nếu muốntác động lên nhiều đối tượng cùng lúc thì giữ Ctrl và kíchchọn lần lượt các đối tượng
Hình 2.23 Menu Layout
ToolBar Control :
Đây là công cụ chính để tạo ra các thành phần cơ bản trong
giao diện , các nút bấm (button), editbox, listbox , combobox, spin …, khi đưa thêm các ActiveX vào ứng dụng nócũng có mặt trong toolbar
control này
Hình 2.24.ToolBar Control
2.4.Các môi trường xây dựng ứng dụng trong VC++ 6.0
2.4.1.Dialog based
Là môi trường làm việc trên các cửa sổ đơn, Dialog based tương đối đơn giản dễ sử
dụng và có khả năng thiết kế giao diện đẹp
2.4.2.Single Document Interface( SDI) : là môi trường tạo ra các ứng dụng đơn tài
liệu hỗ trợ một vùng quan sát và chỉ có thể làm việc với một kiểu tài liệu tại một thờiđiểm
2.4.3.Multiple Document Interface (MDI) : môi trường cho phép tạo ra các ứng dụng
đa tài liệu , với mỗi tài liệu có một hoặc nhiều vùng quan sát
Trang 20Phần 3 HƯỚNG DẪN LẬP TRÌNH VC++ 6.0
Hình 3.1 sơ đồ các bước xây dựng chương trình với VC++ 6.0
Chương 1 Các thao tác với lớp, hàm, biến
Ứng dụng cơ bản nhất chính là kiểu Dialog Based Với kiểu ứng dụng này hệ
thống sẽ không có những hộ trợ ban đầu về thanh công cụ, các menu Tuy nhiên khilàm việc trên kiểu ứng dụng này sẽ dễ dàng cho việc hình dung các thao tác hơn
Chúng ta có thể thiết kế các menu và toolbar riêng
3.1.1.Đưa các file có sẵn vào trong chương trình ứng dụng :
Trong một số trường hợp, các ứng dụng có thể sử dụng dữ liệu có sẵn (đã được
viết cho một chương trình nào đó)như các header file, source file hay các thư viện
được viết riêng rẽ vì vậy sử dụng thao tác này để tiết kiệm được thời gian code chương
trình Khởi động chương trình VC++ 6.0 và tạo một chương trình mới (Ở đây tạo mộtứng dụng MFC AppWizard , tên ứng dụng là VD):
Trang 21Hình 3.2 Tạo một ứng dụng MFC.
Hình 3.3.Chọn Kiểu ứng dụng tạo ra là Dialog Cơ bản
Hình 3.4.Chọn Project>Add To Project>File để đưa thêm file vào ứng dụng.
Trang 22Sau khi chọn File trong Insert Files into Project ta chọn đường dẫn tới file cần đưa
vào ứng dụng :
Hình 3.5 Đường dẫn tới file cần đưa vào (chọn file> ok)
Đôi khi chúng ta cần đưa một ActiveX vào trong ứng dụng (đây chính là các thành
phần được thiết kế sẵn, độc lập, khi đưa vào sử dụng ta chỉ cần chỉnh sửa thông số cho
phù hợp), thì thay vì chọn File trong tab Add to Project ta chọn Components andControl để đưa ActiveX vào ứng dụng
Hình 3.6 Đưa ActiveX vào ứng dụng.
Chọn đường dẫn tới ActiveX cần thêm :
Trang 23Hình 3.7 Nơi chứa các ActiveX
3.1.2 Thêm lớp mới vào trong chương trình :
VS C++ quản lý các đổi tượng thông qua các lớp, trong các lớp này chứa thông
tin và kiểu dữ liệu cũng như cách thức sử dụng các thành phần của lớp Vì vậy tạo ramột lớp mới là một công việc diễn ra một cách thường xuyên, dưới đây là những thaotác cơ bản để tạo ra một lớp mới
VD: tạo một lớp đường thẳng chứa thông tin về 2 điểm được kích hoạt khi dùngchuột, các hàm tạo điểm, lấy điểm, hàm vẽ nối 2 điểm
Hình 3.8.Chọn tab Class View trong Workspace> kích chuột phải vào VD class>ChọnNew Class
Trang 24Hình 3.9 Đặt tên lớp DuongThang Ấn OK để kết thúc
Hình 3.10.Sau khi tạo lớp sẽ có các thành phần liên quan tới lớp vừa tạo ra.
Chúng ta sẽ tác động đến lớp này thông qua Header file và source file, chúng nằmtrong vùng làm việc cây thư mục File View
Hình 3.11.Header DuongThang.h sẽ chứa các khai báo dùng trong lớp DuongThang
Trang 25Hình 3.12.Source File DuongThang.cpp sẽ thực thi những gì đã khai báo trongHeader file DuongThang.h
3.1.3 Thêm một hàm mới nằm trong lớp :
Hàm trong VS C++ được khai báo trong các lớp và được gọi trong ứng dụng để
thực thi lệnh Các thuộc tính của hàm làKiểu hàm, Tên hàm, và kiểu truy cập dữ
liệu .Trong VC++ có một hệ thống thư
viện có sẵn, thực chất các thư viện là cácchương trình đã được đóng gói, bản thânnó có cấu trúc như một lớp, có các hàm vàcác hàm này đã được định nghĩa Ta hoàntoàn có thể tạo được một thư viện bằngcách viết một chương trình với kiểu ứng
dụng Win32 static Library, công việc viết
chương trình hoàn toàn bình thường tuynhiên không có phần hiển thị và không cógiao diện chương trình, chúng chính là phần thiết kế module Các module thư
viện sẽ giúp cho công việc lập trình với Hình 3.13.Thêm hàm
VC++ có thể chia sẻ, phân tách cho nhiều người cùng làm, và để có một chương trình
hoàn chỉnh sẽ là gắn kết các module thư viện này thành một
Vì vậy các hàm có thể gọi trực tiếp từ các module thư viện hoặc có thể viết hàm trongchương trình sau đó gọi tới nó bằng cách truyền cho nó tham số.
Để tạo hàm trong chương trình :
Chúng ta sử dụng 2 cách cơ bản để thêm hàm :
Cách thứ nhất là kích chuột phải vào tên Lớp trong vùng làm việc với cây thư mục
ClassView (ở đây là lớp đường thẳng ), chọn Add Member Function để mở ra hộpthoại Add Member Function :
Trang 26Hình 3.14.Thêm hàm mới vào trong lớp DuongThang
Trang 27Hình 3.16.Thao tác thêm hàm mới bằng “Tay”
3.1.4.Cách thêm một biến mới.
Các biến có thể khai báo theo hai hướng Biến có thể khai báo trong một lớp như cách thêm một hàm mới
Hình 3.17.Thêm biến vào trong lớp DuongThang
Hình 3.18.Thuộc tính của biến
Trang 28Có kiểu thêm biến khác chính là thêm biến điều khiển cho các thành phần của
Dialog.Các biến này sẽ thông qua các sự kiện để điều khiển Dialog Chẳng hạn trongmột ứng dụng về giao tiếp máy tính có ComboBox khác nhau, chúng ta sẽ tiến hànhthao tác trên comboBox chứa các cổng Com, vì vậy phải đặt biến điều khiển cho nó
Hình 3.19.Thêm biến điều khiển thành phần của Dialog.
Ấn Ctrl+W để hiện bảng MFC ClassWizard Ở đây sẽ chứa toàn bộ các thành phần
trong phần giao diện chĩnh đã được đặt địa chỉ điều khiển và các biến được thêm vào
nhờ Add Variable để điều khiển các ID này
Hình 3.20 Chọn thành phần cần đk(B3), ấn Add Variable(B4).
Trang 29Hình 3.21.Khai báo thuộc tính của biến
Sau khi ấn ok ở bảng MFC Wizard sẽ xuất hiện thành phần
IDC_COMBO_COMPORT có biến m_cboComPort kiểu CComboBox Ấn Ok để
hoàn tất quá trình
Chú ý : Các biến trong VC++ được khai báo kiểu truy cập là public , private hay
protected Biến kiểu public sẽ được truy cập mọi nơi, biến protected chỉ có thể đượcsự dụng trong một lớp, lớp con và friend của nó Biến private chỉ có tác dụng trong
một lớp và friend của nó
Khi đặt tên các biến nên quan tâm tới chức năng của nó cũng như phạm vi hoạt độngcủa chúng và nên đặt theo một quy tắc thống nhất để dễ quan sát và chỉnh sửa nó khicần thiết
Ví dụ với biến toàn cục nên đặt theo kiểu “m_ ”, biến điều khiển nên có kiểu“m_Ctrl…” …
Một số kiểu dữ liệu của biến hay sử dụng (các biến được quản lý trong một lớp ) :
-Lớp CFont : lớp này quản lý mọi dữ liệu liên quan đến phông chữ được sử dụng
trong chương trình, khai báo biến thuộc lớp này như sau :
CFont font;// Với font là tên biến (tự đặt ).
Khởi tạo cho biến này :
font.CreateFont(……); //Các tham số trong hàm này sẽ được chi tiết hơn
trong mục lấy font hệ thống
-Lớp CString : Lớp này quản lý các chuỗi kí tự Khai báo biến Cstring str ;// Với str là tên biến được đặt
Để tác động được lên chuỗi này (chẳng hạn nội dung của chuỗi ) đều thực hiện theoform sau : str.Hàm(các tham số );
-Lớp CFileDialog : lớp này quản lý các chức năng về File, cách khai báo và khởi tạo
CFileDialog pFile( BOOL ,” Ext”,CString,nFlags, szFilter);
trong đó BOOL là hằng số kiểu BOOL TRUE hay FALSE, “.Ext” là phần mở rộngcủa File được mở bởi một biến được khai báo kiểu “Static CharBASED_CODE”,CString là một chuỗi kí tự, nó là đường dẫn tới File được mở nếuBOOL nhận giá trị TRUE hay đường dẫn tới File được lưu ,nFlags là kiểu hoạt độngcủa thao tác mở file hay lưu file và tham số còn lại szFilter được sử dụng trước đó :
static char BASED_CODE szFiler[]= “……//kiểu file……”;
Sau khi khởi tạo cho biến pFile thì sẽ xuất hiện hộp thoại DoModal( ) nếu ấn Ok thìtham số sau đó sẽ được lưu và không khi không có thao tác OK.
-Lớp CColorDialog : cách thức sử dụng lớp này cũng tương tự như lớp CFileDialog.
Lớp này khi khởi tạo cho nó sẽ mở hộp thoại chọn màu như bảng màu trong Paint của
Trang 30Window
-Lớp CBitmap : là lớp quản lý các file ảnh định dạng “*.bmp”
-Lớp CRect : lớp chứa các khung hình chữ nhật với 2 thuộc tính là cặp toạ độ (x,y) của2 đỉnh đối diện góc bên trái và góc bên phải của CRect
…
Trang 31Chương 2 Tạo các Menu, ToolBar và các thao tác cơ bản
3.2.1.Tạo Menu.
Trong cây thư mục Resource File , kích chuột phải vào resources của ứng dụng để hiện
ra hộp thoại Insert Resource :
Hình 3.22.Thêm các menu, toolbar mới.
Ở đây hộp thoại này có thể chọn tạo ra một Dialog hay meu, toolbar mới , thao tác tiếptheo là ấn New để hoàn tất Hệ thống sẽ mặc định tên cho các thành phần mới tạo ra,đổi tên cho công việc quản lý nó dễ dàng hơn bằng cách kích chuột phải vào nó trong
cây thư mục Resource View và chọn Properties :
Hình 3.23 Đổi tên cho một Dialog vừa tạo ra
Ở đây tạo ra một menu mới có địa chỉ điều khiển là IDR_MENUFILE, menu này
chứa thao tác File (tạo mới, mở file, save file, và thoát chương trình )
Lúc này trong màn hình làm việc , với tab Dialog trong Tab Resource ta tạo thêm cácthành phần trong menu bằng cách kích đúp vào khung hình chữ nhật chống và thêmcác thuộc tính của nó
.
Trang 32Hình 3.24.Tạo thêm các thành phần cho menu mới tạo ra.
Lúc này nếu cho biên dịch chương trình thì Menu File vừa tạo ra sẽ không có trongGiao diện chương trình Ta phải kích hoạt nó trong Dialog chính, mở thuộc tính củaDialog chính mà ta muốn đưa Menu vừa tạo ra xuất hiện trong đó :
Hình 3.25 Đưa Menu vào trong chương trình
Trong mục Menu chọn địa chỉ điều khiển của Menu File vừa tạo,cho chạy chươngtrình chúng ta sẽ thấy sự hiện diện của Menu vừa thiết kế
Trang 33Hình 3.26 Giao diện chương trình có mặt Menu vừa thiết kế
Phần viết code cho menu sẽ được đề cập sau
3.2.2.Tạo ToolBar mới
Trong ứng dụng Dialog Based đôi khi cần sự có mặt của các toolbar để thực thilệnh Tạo ra một ToolBar mới nhờ hộp thoại InSert Resource (hình 38)
ToolBar vừa tạo ra được mặc định là IDR_TOOLBAR1 bằng cách mở hộp thoại thuộctính của nó, đổi tên thành IDR_TOOLBAR_DRAW Trên màn hình soạn thảo là các
nút bấm của toolbar, sau khi tạo biểu tượng cho 1 nút bấm hoàn chỉnh VC++ sẽ tựđộng tạo thêm một nút bấm nữa
Hình 3.27 Tạo ra các nút bấm cho ToolBar
Các nút bấm trong Toolbar muốn sử dụng được phải được gán cho một địa chỉ và cácbiến truy cập đến nó.Kích đúp vào các nút bấm này và điều chỉnh thuộc tính thành các
ID_DUONGTHANG ;
ID_DUONGTRON; ID_CHUNHAT
Trang 34Hình 3.28 Tạo các địa chỉ truy cập cho các nút bấm trong ToolBar.
Lệnh khởi tạo tới nó sẽ được xem xét sau
3.2.3.Tác động các sự kiện lên đối tượng
Hình 3.29.Cách tác động lên các đối tượng trong ứng dụng.
Ấn Ctrl+W để xuất hiện hộp thoại MFC ClassWizard, chọn tab Message Maps, mụcclass name chính là phần chọn lớp mà chúng ta muốn tác động lên, chọn địa chỉ điều
khiển của đối tượng cần chịu sự kiện tác động, tab messages chính là danh sách các sự
kiện có thể tác động lên đối tượng, chọn sự kiện (kích đúp hoặc chọn rồi ấn AddFunction ), chọn Edit Code để viết code tác động, hoặc trong file nguồn của lớp tìm
đến sự kiện tác động để viết lệnh
Trang 353.2.4 Đẩy một icon lên nút bấm trong ứng dụng
Việc đưa một biểu tượng lên nút bấm sẽ tăng thêm tính bắt mắt cho giao diện củachương trình ứng dụng (Ở đây lấy ứng dụng mang tên Font) Đầu tiên phải sử dụng
hộp thoại Insert Resource (mục 5 đã đề cập) bằng cách kích chuột phải vào Resourcecủa ứng dụng trong cây thư mục Resource View, chọn New để tạo ra icon mới bằngcách vẽ trực tiếp trong VC++ 6.0 và chọn Import khi tải Icon có sẵn Icon mới tạo rađược mặc định địa chỉ điều khiển là IDI_ICON1 Ta sẽ thực hiện thao tác đưa Iconnày lên nút bấm có địa chỉ là IDC_BUTTON1 Đổi tên các icon và button này thànhIDI_MUSIC và IDC_MUSIC
Dùng sự kiện WM_INITDIALOG tác động lên giao diện chính của chương trình :
Hình 3.30.Tác động WM_INITDIALOG lên lớp CFontDlg
Ấn Add Function, tự động mặc định cho ta kiểu hàm tác động là OnInitDialog, ấn Editcode để soạn mã lệnh
BOOL CFontDlg::OnInitDialog( )//Hàm tác động , hàm này thường //dùng để khởi tạo
CDialog::OnInitDialog( );
HICON m_browse; //Tạo một biến kiểu HICON để tải icon
m_browse=AfxGetApp( )->LoadIcon(IDI_MUSIC);// Tải icon có địa chỉ IDI_MUSIC và gán cho biến m_browse
CButton* m_dk=(CButton*)GetDlgItem(IDC_MUSIC);
//Tạo ra biế /m_dk điều khiển sự hiển thị của nút bấm IDC_MUSICm_dk->SetIcon(m_browse);// Đặt icon lên nút bấm
return TRUE;}
Cho chạy chương trình chúng ta sẽ thấy nút bấm sẽ có hình là Icon IDC_MUSIC (ở đây là biểu tượng WD media player):
Trang 36H ình 3.31 Đẩy Icon lên nút bấm
3.2.5.Tạo các ToolTip (chú thích ) cho đối tượng
Các tooltip này sẽ được tác động lên đối tượng thông qua sự kiện
WM_INITDIALOG.Tạo một ứng dụng MFC AppWizard với kiểu Dialog basedmang tên Font.
Kích chuột vào File View và tìm đến file FontDlg.h để khai báo một biến m_toolTipthuộc lớp CtoolTipCtrl(là lớp quản lý các chú thích cho đối tượng ) và kiểu truy cậpPublic.
CToolTipCtrl m_toolTip;………
Trong ứng dụng cần thêm một chú thích cho nút bấm có địa chỉ điều khiển là
IDC_MUSIC (vốn đã được thay bằng một Icon nên thêm chú thích để người dùng dễnhận biết ) Chú thích này có nội dung là “ Find PathName of Wave soud to play”
Để hiển thị được chú thích này phải thực hiện 2 bước :
Bước 1{ Gán chú thích lên nút bấm ( có định nghĩa màu nền, màu chữ ); }Bước 2{Relay để chú thích đó hiển thị được;}
Bước 1:
Ấn Ctrl+W để xuất hiện hộp thoại MFC class Wizard :
Chọn Class name là CFontDlg, Object IDs là CFontDlg, kích đúp vào MessagesWM_INITDIALOG để hàm mặc định là OnInitDialog và ấn Edit Code để viết
chương trình :
Trang 37Hình 3.32.Tác động sự kiện WM_INITDIALOG.BOOL CFontDlg::OnInitDialog()
m_toolTip.Create(this);//Khởi tạo chú thíchm_toolTip.Activate(TRUE);//Kich hoạt chú thích
m_toolTip.SetTipBkColor(RGB(255,255,255));// Đặt màu nền cho
Bước 2: Thêm sự kiện PreTranslateMessage để relay và hiển thị chú thích, cũng vớithao tác như tác động sự kiện WM_INITDIALOG nhưng giờ là chọn sự kiệnPreTranslateMessage ấn edit code và viết lệnh như dưới :
BOOL CFontDlg::PreTranslateMessage(MSG* pMsg) {
m_toolTip.RelayEvent(pMsg);//Relay sự kiện có mặt chú thích
//tác động lên nút bấm
return CDialog::PreTranslateMessage(pMsg);}
Ấn F5 để biên dịch chương trình ta thu được kết quả như ý muốn
Trang 38Hình 3.33.Kết quả hiển thị chú thích khi lướt chuột qua nút bấm.
3.2.6.Tác động tới biểu tượng chuột trong ứng dụng
Trong ứng dụng về ActiveX ở mục 11, tác động biểu tượng chuột bằng cách thêm sự
kiện WM_MOUSEMOVE (Ấn Ctrl+W và chọn lớp CWMADlg với sự kiệnWM_MOUSEMOVE ) :
void CWMADlg::OnMouseMove(UINT nFlags, CPoint point) {
HCURSOR BieuTuongConTro; // tạo một biến để lưu giữ biểu tượng
//tượng chuột lên biến
::SetCursor(BieuTuongConTro);//Thiết lập biểu tượng chuột hiện //hànhCDialog::OnMouseMove(nFlags, point);
Ấn F5 để chạy chương trình
Trang 39Chương 3 Sử dụng Font và giờ hệ thống
3.3.1.Lấy font hệ thống viết text và thao tác vẽ lên màn hình
Mọi thao tác liên quan đến hiển thị luôn luôn sử dụng mối liên hệ logic :
-Khai báo ngữ cảnh thiết bị (Device context :DC)
-Khai báo thành phần hiển thị
-Thực thi hiển thị trên ngữ cảnh thiết bị
Vì vậy trong môi trường ứng dụng bao giờ cũng có việc khai báo ngữ cảnh thiết bịtrước khi tiến hành các hoạt động có liên quan đến đồ hoạ
Để cho chương trình gọn và hợp lý, công việc thực thi hiển thị sẽ được viết riêngnhư là các hàm có sử dụng ngữ cảnh thiết bị, sau đó tiến hành khởi tạo đồ hoạ và cuốicùng là thao tác gọi hàm vẽ để hiển thị
Điều thuận lợi trong VC++ đó là tính tương tác của các thành phần trong một lớp rấtcao, các hàm trong một lớp được tạo ra một cách độc lập và được sử dụng khi đượcgọi tới mà không quan tâm đến vị trí khai báo và định nghĩa chúng Cách tác động cácthành phần trong giao diện thông qua các biến điều khiển Nó khiến cho một chươngtrình VC++ nhỏ gọn và có tính rõ ràng hơn rất nhiều
Để khởi tạo đồ hoạ chúng ta sử dụng sự kiện OnInitDialog tác động lên lớp chính hiển thị (trong Dialog based là CprojectDlg ,ở SDI là
CProjectViewDlg …với Project là tên của ứng dụng ).
Để khởi tạo, chọn sự kiện tác động OnInitDialog( ) và thêm đoạn code :
void CProjectDlg::OnInitDialog( ){………
CRect KhungHienThi; //Khai báo một khung hình chữ nhật để hiển thị
//lên nó
GetClientRect(KhungHienThi);// Khởi tạo cho Khung chữ nhật nàyCClientDC dc(this;)//Khai báo ngữ cảnh thiết bị mang tên dc (có tác
// dụng giống như giấy vẽ
pdc_Memory.CreateCompatibleDC(&dc);//pdc_Memory được khai
//báo thuộc lớp CDC có tác dụng như bút vẽ để vẽ lên nền dc
m_NenBitmap.CreateCompatibleBitmap(&dc,KhungHienThi.Width( ), KhungHienThi.Height( ));
//m_NenBitmap được khai báo kiểu CBitmap, hàm
CreateCompatibleBitmap( ) thực hiện công việc kéo Bitmap m_NenBitmap vừa vặn
vào khung chữ nhật đã tạo ra ………
return TRUE; }
Tạo ra công cụ hiển thị thường được viết riêng thành một hàm và sau đó mới được gọitới Hàm này thuộc sự quản lý của lớp hiển thị, khai báo hàm này như sau (trong file
Trang 40void CProjectDlg::TenHam(CDC*pDC){
//Khai báo bút vẽ nếu thực thi vẽ các đường nét khung hình trên màn hình:
CBrush ButVe(RGB( ,…,…)); //với các tham số của hàm RGB( )để chỉ //thị màu
Sau khi đã chỉ ra cách thức hiển thị ( Hàm được tạo ra để hiển thị) và các vận dụngchuẩn bị cho công việc hiển thị (khởi tạo đồ hoạ ) giờ chỉ là công việc thực thi hiển thị.Công việc này sẽ được thực hiện nhờ sự kiện Paint trong lớp hiển thị chính
void CProjectDlg::Paint( ){………
else {
CPaintDC dc(this); //Khai báo ngữ cảnh thiết bị
//Gọi hàm hiển thị với tham số &dc để tiến hành hiển thị //HàmHiểnThị(&dc);
UpdateData(FALSE);//Hàm này có tham số FALSE khi muốn
//đưa dữ liệu trong chương trình ra màn hình và có tham số TRUE khi nhập //dữ liệu từ bên ngoài vào
……….
CDialog::OnPaint( ); }
Ví dụ dưới đây minhhọa cho một đoạn textchạy trong một khungchữ nhật được vẽ lênmàn hình hiển thị Đầu tiên khởi độngVC++ 6.0, vào
File>New để mở một
ứng dụng MFCAppWizard và
đặt tên chương trìnhlà VD > ấn ok đểchuyển sang bước tiếptheo :
Hình3.34 Tạo chương trình mới mang tên VD kiểu ứng dụng Dialog based