/

17 tháng 3, 2013

Bài 10: Sử dụng MFC

Bài học này không thật sự liên quan đến AutoCAD và ObjectARX, mà nó chỉ cho ta thấy một cái nhìn tổng quan về thư viện MFC. Thư viện này giúp bạn tạo giao diện phong phú cho ứng dụng ObjecARX một cách đơn giản với phong cách chuyên nghiệp.

Giới thiệu


MFC (Lớp nền tảng Microsoft - Microsoft Foundation Classes) là một thư viện mạnh cho lập trình viên windows dễ dàng tạo ra giao diện phong phú từ giao diện chuẩn của windows.
Cây phân lớp MFC rất đồ sộ và mạch lạc. Việc tạo một thuật sĩ (wizard) MFC không phải là mục tiêu của bài học. Mà ở đây tôi sẽ trình bày những khái niệm liên quan chính khi sử dụng MFC trong AutoCAD và làm cách nào để có được lợi thế từ sức mạnh của thư viện khổng lồ này.
Nếu muốn sử dụng MFC bên trong ứng dụng ObjectARX, bạn sẽ cần liên kết ứng dụng với thư viện MFC bằng liên kết động hoặc tĩnh. Hiện tại ObjectARX chỉ hỗ trợ liên kết động đến ứng dụng MFC DLL bởi vì một số thư viện AutoCAD đã được liên kết động với MFC và bạn không thể có lẫn hai trạng thái liên kết đến cùng một thư viện. Để tạo liên kết động với MFC trong ứng dụng, bạn cần lựa chọn MFC Extension DLL khi tạo một ứng dụng mới.

Quản lý tài nguyên


Một trong những khái niện quan trọng nhất khi làm việc với các thư viện MFC là việc chúng dựa vào các tài nguyên. Tài nguyên rất phong phú thông tin như ảnh bitmap, biểu tượng icon, bảng chuỗi ký tự, lớp hộp thoại, v.v. Mỗi một DLL có một gói tài nguyên riêng có thể được sử dụng bởi chính nó hoặc được chia sẻ với các DLL khác (Ví dụ Tài nguyên chỉ chỉ là DLL).

Vấn đề là ứng dụng ObjectARX được chạy bên trong ứng dụng nền AutoCAD mà AutoCAD đã có sẵn các nguồn tài nguyên. Để giải quyết vấn đề này, bạn nên chuyển đổi nguồn tài nguyên này vào trong DLL của bạn, sử dụng nó và chuyển đổi trở lại AutoCAD. Bạn làm việc đó thủ công hoặc có một cặp lớp sẽ giúp bạn thực hiện một cách đơn giản hơn.


Lớp đầu tiên gọi là CAcExtensionModule sẽ nắm giữ nguồn tài nguyên mà module sở hữu và nguồn tài nguyên mặc định. Để ứng dụng có thể lấy được lợi thế của lớp này, bạn sẽ cần phải tạo một đại diện của lớp bên trong mỗi hàm DllMain() module. Thực hiện như sau:
The first class, called CAcExtensionModule which will handle your module's own resource and the default resources. To make your application take advantage of this class you will need to create an instance of this class inside each module DllMain() function. This can be done using the following:
AC_IMPLEMENT_EXTENSION_MODULE(theArxDLL);
HINSTANCE _hdllInstance = NULL;
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
// Loại bỏ nếu bạn sử dụng lpReserved
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH) {
theArxDLL.AttachInstance(hInstance);
hdllInstance = hInstance;
}
else if (dwReason == DLL_PROCESS_DETACH) {
theArxDLL.DetachInstance();
}
return 1; // ok
}
Lớp thứ hai là CAcModuleResourceOverride, là một lớp hữu ích. Nó tiến hành chuyển đổi từ tài nguyên của AutoCAD thành tài nguyên của ứng dụng khi nó được khởi tạo. Sau đó, khi bị hủy bỏ, nó chuyển đổi trở lại AutoCAD. Để sử dụng nó, chỉ cần khai báo một đối tượng của nó trước khi sử dụng tài nguyên riêng của bạn. Khi hoàn thành nghiệm vụ, nó sẽ bị hủy bỏ và và hàm hủy sẽ chuyển đổi trở lại. Cách thực hiện như sau:
CAcModuleResourceOverride res;
CMyDialo dlg;
dlg.DoModal();
Bằng cách này, bạn sẽ tạo thành công hộp thoại và không đối mặt với những lỗi lạ như "An unsupported operation was attempted". Một lỗi khác có thể xảy ravowis hộp thoại xuất hiện thay cho hộp thoại của bạn! Điên rồ không? Hãy nhớ nó áp dụng được cho bất kể tài nguyên nào bao gồm cả những chuỗi ký tự đặt bên trong của bảng chuỗi.

Sử dụng hỗ trợ MFC dựng sẵn (Built-in)

AutoDesk còn cung cấp một vài lớp tuyệt vời để làm ứng dụng của chúng ta nhìn giống như một tính năng nguyên bản của AutoCAD và làm việc hài hòa hơn với giao diện của AutoCAD. Có hai bộ sưu tập của lớp MFC dựng sẵn được nhóm bởi tiền tố AcUiAdUi. Lớp tiền tố AcUi được tạo ra để làm việc bên trong môi trường AutoCAD và lớp AdUi tạo ra để làm việc bên ngoài AutoCAD, nhưng do thỏa thuận cấp bản quyền, chỉ có thể sử dụng trong các ứng dụng tương tác với AutoCAD mà thôi.

Mỗi một lớp lại cho phép bạn tạo các nút button giống nhau mà ta vẫn nhìn thấy trong các hộp thoại nguyên bản của AutoCAD, cho phép chúng ta tạo ra những điều khiển thông minh để làm việc với góc đo, điểm, text, ... Còn có cả những hộp combo cho phép chúng ta tạo ra Lớp Layer như combo, combo đường nét, combo màu sắc ...
Các lớp này cung cấp cho ứng dụng một giao diện chuyên nghiệp nhất có thể. Và rất nhiều đặc tính nâng cao khác như xâm nhập vào trong hộp thoại tùy chọn của AutoCAD, tạo ra tab, tạo hộp thoại đính, và rất nhiều cái khác nữa.

Tìm hiểu thêm tài liệu ObjectARX để có cái nhìn đầy đủ về các lớp này.
Link nguồn: Arxdummies

Không có nhận xét nào:

Đăng nhận xét