Khung cửa sổ giao diện chính - Pdf 63

Khung cửa sổ giao diện chính 117
CHƯƠNG 10:

KHUNG CỬA SỔ GIAO DIỆN CHÍNH

10.1 KHUNG CỬA SỔ GIAO DIỆN (FRAME WINDOW):
Frame window là loại cửa sổ chuyên dùng làm màn hình chính của ứng
dụng. Frame window có các đặc điểm như sau:
 Cho phép lồng vào frame window thanh trạng thái (statusbar), thanh
công cụ (toolbar), menu và các phím tắt trên menu.
 Cho phép lồng một đối tượng view (thuộc lớp kế thừa từ CWnd) vào
vùng client của frame window để hoạt động phối hợp trong việc hiển
thò nội dung trao đổi của ứng dụng. Hành vi OnSetFocus của frame
window thực hiện hành vi OnSetFocus của view để tạo sự đồng bộ giữa
frame và view khi kích hoạt. Thông qua hành vi OnCmdMsg, frame
window có thể điều phối command message cho view.
 Phối hợp, đồng bộ việc thực hiện xử lý và thay đổi trạng thái của các
đối tượng trực thuộc: menu, toolbar, statusbar, view.
 Cho phép cơ chế thực hiện WinHelp và tự động kết thúc WinHelp khi
frame window chấm dứt hoạt động.

10.2 THANH TRẠNG THÁI (STATUSBAR) & LỚP CStatusBar:
StatusBar là khung bao gồm các hộp (pane) chứa thông báo. Thông qua
statusbar, ứng dụng có thể thông tin cho người dùng về các hoạt động của ứng
dụng và các thông số liên quan. Statusbar thường được đặt ở cạnh dưới của
frame window. Mỗi pane trên statusbar có thể được ấn đònh một kiểu dạng
thể hiện và nội dung thông tin riêng.
Việc quản lý statusbar trong ứng dụng được MFC hỗ trợ thông qua lớp đối

ID_INDICATOR_CAPS : Pane trạng thái phím capslock.
ID_INDICATOR_NUM : Pane trạng thái phím numslock
ID_INDICATOR_SCRL : Pane trạng thái phím scrolllock
 void SetWindowText (
LPCTSTR
lpszString
// Nội dung thông báo cập nhật
); Cập nhật thông báo cho pane có số hiệu là 0.
 BOOL SetPaneText (
int
nIndex
, // Số hiệu pane
LPCTSTR
lpszNewText
, // Nội dung thông báo cập nhật
BOOL
bUpdate
=TRUE // Vẽ lại thông tin cập nhật
); Cập nhật nội dung thông báo trong pane một pane.
 void SetPaneInfo (
int
nIndex
, // Số thứ tự pane trong statusbar
UINT
nID
, // Số hiệu gán cho pane
UINT
nStyle
, // Thông số dạng của pane
int

, /* Con trỏ đối tượng cửa sổ cha */
/* Thông số dạng của toolbar với giá trò mặc nhiên */
DWORD
dwStyle
= WS_CHILD | WS_VISIBLE | CBRS_TOP,
/* Số hiệu của toolbar, giá trò mặc nhiên cho toolbar chính */
UINT
nID
= AFX_IDW_TOOLBAR
); Khởi tạo thông số cho đối tượng toolbar.
dwStyle
có thể nhận các thông số sau:
CBRS_GRIPPER : Toolbar di chuyển được
CBRS_FLOAT_MULTI : Cho phép nhiều toolbar trong 1 frame
CBRS_TOOLTIPS : Có tiptext cho mỗi mục chọn
CBRS_FLYBY : Đồng bộ tooltip và message info
CBRS_SIZE_DYNAMIC : Kích thước thay đổi được
CBRS_SIZE_FIXED : Kích thước cố đònh
 BOOL CreateEx (
CWnd*
pParentWnd
,
DWORD
dwCtrlStyle
= TBSTYLE_FLAT, // Dạng phẳng
DWORD
dwStyle
= WS_CHILD | WS_VISIBLE | CBRS_TOP
CRect
rcBorders

:
Toolbar resource chứa thông tin về hình ảnh, số hiệu, nội dung thông báo
và các hướng dẫn cho từng mục chọn trên thanh toolbar.
 Mở dự án cần bổ sung toolbar resource trong VC.
 Tạo mới toolbar resource: Thực hiện tương tự tạo mới icon (2.8).
Lưu ý
: Chọn
Resource Type
=
ToolBar
.
 Đặt số hiệu cho toolbar (ví dụ IDR_MAINFRAME cho toolbar chính).
 Thiết kế toolbar thông qua màn hình thiết kế mà ta vừa nhận được từ
bước trên. Các thao tác cơ bản như sau:

Khai báo thông số cho nút chọn
:
- Double-click trên nút:

- Ấn đònh các thông số cho nút:
à
ID
: Số hiệu của nút chọn, có thể là số hiệu của mục menu.
à
Width
,
Height
: Chiều rộng và chiều cao của nút.
à
Prompt

{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

// Create the main toolbar for frame window
m_toolbar.CreateEx(this, TBSTYLE_FLAT,
WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY);
// Initiate toolbar’s appearance by toolbar resource
m_toolbar.LoadToolBar(IDR_MAINFRAME);
m_toolbar.EnableDocking(CBRS_ALIGN_ANY);
// attach the toolbar to frame window
this->EnableDocking(CBRS_ALIGN_ANY);
this->DockControlBar(&m_toolbar,
AFX_IDW_DOCKBAR_TOP
);
return 0;
}

10.4 LỚP CFrameWnd:
CFrameWnd là lớp đối tượng kế thừa từ CWnd cho phép quản lý frame
window trong ứng dụng. Ngoài các thuộc tính và hành vi kế thừa public từ
CWnd, CFrameWnd có các thuộc tính và hành vi đặc trưng giúp việc ấn đònh
và điều khiển frame window được dễ dàng và hiệu quả.
 CFrameWnd( ); Hành vi tạo lập.
 BOOL Create (
LPCTSTR
lpszClassName
, // Tên lớp đã đăng ký của frame
LPCTSTR

 afx_msg int OnCreate( LPCREATESTRUCT
lpCreateStruct
); Hành vi
kế thừa cho phép khởi tạo thông số các đối tượng trực thuộc.
 virtual BOOL LoadFrame (
UINT
nIDResource
, // Số hiệu các resource liên quan: icon,
// cursor, bảng phím tắt, menu (bắt buộc).
DWORD
dwDefaultStyle
// Thông số dạng frame window
= WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,
CWnd*
pParentWnd
// Con trỏ đối tượng cửa sổ cha
); Khởi tạo thông số cho frame window.
 BOOL LoadAccelTable (
LPCTSTR
Bảng_phím_tắt
// Tên bảng phím tắt trong resource
); Nạp bảng phím tắt, chỉ dùng khi frame được khởi tạo bởi Create.
 virtual void ActivateFrame (
int
nCmdShow
= -1 // Thông số về trạng thái kích hoạt
); Hành vi kế thừa để ấn đònh thông số trạng thái frame khi kích hoạt.
 void EnableDocking (
DWORD
dwDockStyle

, // Con trỏ đến cấu trúc chứa
CCreateContext*
pContext
// Các thông số liên kết.
); Hành vi được thực hiện khi các view đã được tạo xong. Kế thừa hành
vi này để ấn đònh các thông số riêng của ứng dụng.
 virtual CWnd* GetMessageBar( ); Trả về con trỏ trỏ đến đối tượng
statusbar trực thuộc.

10.5 SỬ DỤNG FRAME WINDOW LÀM GIAO DIỆN CHÍNH:
Kế thừa từ CWnd, CFrameWnd và các lớp kế thừa từ nó có thể dùng khai
báo các đối tượng cửa sổ giao diện chính của ứng dụng.
10.5.1 Thực hiện ứng dụng với giao diện chính là CFrameWnd
:
2 Thực hành 1
: Thực hiện ứng dụng với cửa sổ chính là frame window.
 Tạo dự án VD28 chỉ chứa lớp CEmpApp kế thừa từ CWinApp.
 Trong hành vi InitInstance của CEmpApp, khai báo biến con trỏ đối
tượng CFrameWnd* và dùng nó làm cửa sổ giao diện chính:
BOOL CEmpApp::InitInstance( )
{
CFrameWnd *main = new CFrameWnd;
m_pMainWnd = main; // frame window as the main window
main->Create (
AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
LoadCursor(IDC_MAINFRAME), NULL,
LoadIcon(IDR_MAINFRAME) ),
"Emp.Example 28" );
main->ShowWindow(SW_SHOW); // Show the frame window
return TRUE;

 Double-click hoặc gõ Enter trên dòng trống của StringTable: Khung cửa sổ giao diện chính 125
-
ID
= Số hiệu hằng chuỗi.
-
Caption
= Nội dung hằng chuỗi. Gõ phím
Enter
để kết thúc.
 Cuối cùng, lưu và đóng màn hình khai báo StringTable.

Φ
Sử dụng hằng chuỗi trong StringTable
: Có thể sử dụng hằng chuỗi trong
StringTable làm giá trò cho biến chuỗi trong chương trình. Đối với biến
chuỗi được quản lý bởi đối tượng chuỗi CString, xử lý này được thực hiện
thông qua hành vi sau:
BOOL CString::LoadString (
UINT
nID
// Số hiệu hằng chuỗi trong resource
);
Sau đây là một ví dụ khởi tạo giá trò chuỗi myString từ string resource:
CString myString;

 Bổ sung hành vi OnCreate (xử lý WM_CREATE) cho CEmpFrame và
thực hiện cài đặt như sau:
126Lập trình Windows với MFC - Microsoft Visual C++ 6.0
- Lê Ngọc Thạnh - [email protected]

int CEmpFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate( lpCreateStruct ) == -1)
return -1;
// The IDs of all statusbar’panes
UINT ID_array[3] = { 1, 1, ID_SEPARATOR };

m_status.Create( this ); // Thanh statusbar chính
m_status.SetIndicators( ID_array, 3 );
m_status.SetPaneText( 0, "Mr.Emp" );
m_status.SetPaneText( 1, "Hello world!" );

// Set the size of each pane on statusbar
m_status.SetPaneInfo( 0, 1000, 0, 40 );
m_status.SetPaneInfo( 1, 1001, 0, 70 );
m_status.SetPaneInfo( 2, ID_SEPARATOR, 0, 300 );
return 0;
}

2 Thực hành 4: Viết ứng dụng như VD30 với thanh công cụ có 4 nút chọn
tương ứng 4 mục chọn trong hệ thống menu.
 Tạo dự án VD31 như VD30.
 Tạo mới toolbar resource có số hiệu IDR_MAINFRAME với các nút
chọn tương ứng các mục menu.
 Bổ sung đối tượng thuộc tính


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status