Sử dụng VC++ feature pack trong lập trình ứng dụng MFC

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Sử dụng VC++ feature pack trong lập trình ứng dụng MFC

Bài gửi by nth on 03/03/10, 09:02 pm

Từ trước đến nay MFC – Microsoft Foundation Classes vẫn được coi là bộ thư viện dành cho C đơn giản, thuận tiện và dễ dùng. MFC giảm bớt đáng kể công sức của lập trình viên so với lập trình Win32 API truyền thống. Tuy nhiên, so với các công cụ thuộc dạng RAD – Rapid application development như Visual Basic, Delphi hay gần đây là .NET thì MFC vẫn còn nặng nề trong việc xây dựng giao diện, đặc biệt là giao diện không theo chuẩn của Windows. Bạn có thể sử dụng một số gói mã nguồn bổ sung, như The Ultimate Toolbox (http://www.codeproject.com/KB/MFC/index.aspx?#MFC - Open Source Ultimate Toolbox), nhưng việc tạo ra một giao diện thống nhất, hợp lý vẫn tốn nhiều công sức.

VC feature pack đã khắc phục thiếu sót này bằng cách bổ sung tính năng sử dụng những giao diện bắt mắt một cách dễ dàng mà bạn hầu như không phải gõ thêm dòng mã lệnh nào cả.

Bạn chỉ việc chọn giao diện thích hợp trong khi tạo một dự án – project mới. Cần chú ý giao diện mới này chỉ sử dụng được với dạng project là SDI và MDI, cùng một kiểu mới được bổ sung vào là Multiple top-level documents, chứ không dùng được cho dạng Dialog-based.

Ngay sau khi tạo dự án xong, bạn có thể tiến hành biên dịch và chạy thử ngay, kết quả cho ra thật sự ấn tượng với giao diện theo phong cách mà bạn lựa chọn.

Để làm được điều này, VC feature pack đã bổ sung thêm 3 lớp mới:

• CWinAppEx thừa kế từ lớp CWinApp được dùng làm base class cho ứng dụng.

• CFrameWndEx thừa kế từ lớp CFrameWnd được dùng làm base class cho cửa sổ trong SDI – Single Document Interface.

• CMDIFrameWndEx thừa kế từ lớp CMDIFrameWndEx được dùng làm base class cho cửa sổ trong MDI – Multi Document Interface.

Chúng ta thấy sự thiếu vắng của lớp CDialog, và đó là lý do mà gói bổ sung này không hỗ trợ cho các ứng dụng dạng dialog – based. Đây quả thực là điều đáng tiếc vì hiện các ứng dụng dạng dialog vẫn được dùng rất phổ biến và việc tạo dựng một ứng dụng dialog với một giao diện “bắt mắt” không đơn giản.

Mặc dù đã được VC hỗ trợ sinh mã một cách toàn diện, nhưng chúng ta nên nhìn qua xem điều gì đã thực sự xảy ra. Một đoạn mã khởi tạo ứng dụng thông thường có dạng như sau:
class CMFCFeaturePackApp : public CWinAppEx
{
public: CMFCFeaturePackApp();

// Overrides
public: virtual BOOL InitInstance();
};

BOOL CMFCFeaturePackApp::InitInstance()
{
CWinAppEx::InitInstance();

// CWnd* m_pMainWnd; được định nghĩa trong file .h
SetRegistryKey(_T("DeltaX/MFCFeaturePack"));
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME, RUNTIME_CLASS(CMFCFeaturePackDoc),
RUNTIME_CLASS(CMainFrame),

// main SDI frame window
RUNTIME_CLASS(CMFCFeaturePackView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}


Cần chú ý, theo mặc định, VC++ sẽ tạo ra rất nhiều mã phục vụ cho các mục đích khác nhau, chẳng hạn như quản lý keyboard, menu, hiển thị tooltip,... Tùy theo yêu cầu của mình và để giảm kích thước của file thực thi .exe, bạn có thể xóa bớt những đoạn mã không cần thiết (điều này được khuyến cáo trong comment do chính VC++ tạo ra). Đoạn mã ở trên đã lược bỏ những thứ “thêm vào”, chỉ giữ lại những gì cơ bản nhất. Bạn có thể thấy không có nhiều thay đổi nếu như so sánh với mã nguồn cũ mà MFC tạo ra.

Tuy nhiên, phần mà bạn cần thực sự quan tâm nằm ở MainFrm.cpp. Ở đây, bạn có thêm, bớt button vào ribbon, điều chỉnh lại panel,... Chúng ta hãy cùng nhìn qua cách thực hiện các công việc này, các đoạn mã minh họa dưới đây được dùng cho các ứng dụng sử dụng ribbon:

Khai báo biến RibbonBar:
CMFCRibbonBar m_wndRibbonBar;

Khởi tạo trong hàm OnCreate:

m_wndRibbonBar.Create(this);


Điều chỉnh Ribbon Button

Thiếu vắng menu quen thuộc trong giao diện ribbon, thành phần mới Ribbon Button đã được bổ sung để giúp người dùng nhanh chóng truy cập vào những chức năng quan trọng. Gắn với nó là Ribbon Panel, thường được thiết lập tương đương với menu File, nhưng bóng bẩy và trực quan hơn nhiều.
/khai báo các biến

CMFCRibbonApplicationButton m_MainButton;

//thiết lập Ribbon button:

m_wndRibbonBar.SetApplicationButton(&m_MainButton,
CSize (45, 45));

//45 là kích thước hợp lý cho Ribbon Button

CMFCRibbonMainPanel* pMainPanel = m_wndRibbonBar.AddMainCategory
(_T(“File”), IDB_FILESMALL, IDB_FILELARGE);

//khởi tạo Panel và gán 2 imagelist lớn – nhỏ cho Panel này
//Bổ sung thêm chức năng vào Panel
pMainPanel->Add(new CMFCRibbonButton(ID_FILE_NEW,
“New File”, 0, 0));


Hàm khởi tạo của CMFCRIbbonButton như sau (còn một hàm overloading của hàm này, thay vì sử dụng Imagelist thì sử dụng một biến HICON để làm biểu tượng cho nút, tuy nhiên, cách dùng như dưới đây vẫn là phổ biến hơn):
CMFCRibbonButton(UINT nID, LPCTSTR lpszText,
int nSmallImageIndex=-1, int nLargeImageIndex=-1,
BOOL bAlwaysShowDescription=FALSE );

Trong đó nID là ID của nút, lpszText là nhãn của nút, nSmallImageIndex và nLargeImageIndex lần lượt là chỉ số index trong 2 imagelist nhỏ và lớn đã được gán cho biến pMainPanel.

Một Ribbon Button lại có thể có những chức năng nhỏ hơn, chẳng hạn, như đối với chức năng Save as trong Microsoft Word 2007.

Để thực hiện điều này, bạn có thể sử dụng method AddSubItem của Ribbon Button.

Chẳng hạn:

pBtnPrint->AddSubItem(new CMFCRibbonButton
(ID_FILE_PRINT_DIRECT, “Quick Print”, 7, 7, TRUE));

Cuối cùng, là bổ sung nút Close và danh sách
những file mới được mở gần đây:

pMainPanel->Add(new CMFCRibbonButton
(ID_FILE_CLOSE, _T(“Close”), 9, 9));

pMainPanel->AddRecentFilesList
(_T(“Recent Files List:));

===== Thành viên Forum Thien Than CNTT ====
Nothing!

(~~/)
(~'.'~)
(_(__)~~

nth
Admin
Admin

Tổng số bài gửi : 550
Số điểm : 1113
Số lần được cám ơn : 33
Ngày đến diễn đàn: : 01/08/2009
Tuổi : 28
Đến từ : Thiên Đường

Xem lý lịch thành viên http://thuhuong.hot4um.com

Về Đầu Trang Go down

Re: Sử dụng VC++ feature pack trong lập trình ứng dụng MFC

Bài gửi by nth on 04/03/10, 12:14 am

http://nhatphuongle.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3DProgramming%2520Tutorials

===== Thành viên Forum Thien Than CNTT ====
Nothing!

(~~/)
(~'.'~)
(_(__)~~

nth
Admin
Admin

Tổng số bài gửi : 550
Số điểm : 1113
Số lần được cám ơn : 33
Ngày đến diễn đàn: : 01/08/2009
Tuổi : 28
Đến từ : Thiên Đường

Xem lý lịch thành viên http://thuhuong.hot4um.com

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết