Tải bản đầy đủ (.pdf) (16 trang)

Bài giảng Lập trình Windows - Chương 5: Lập trình tài nguyên (2016)

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 (446.45 KB, 16 trang )

Chương 5- Lập trình tài nguyên



Cơ chế và cách tổ chức tài nguyên
Lập trình một số tài nguyên








Thực đơn – menu
Ảnh và biểu tượng – bitmap & icon & cursor
Hộp thoại – Dialog
Các đối tượng điều khiển – control objects
Thanh công cụ - toolbar
Thanh trạng thái – status bar



5.1- Tài nguyên & cách tổ chức


Tài nguyên (resource)?









Là hình ảnh, âm thanh,... cung cấp giao diện cho
ứng dụng.
Tài nguyên được định nghĩa trong tệp *.rc của dự
án chương trình.
Mỗi tài nguyên được định danh bằng một số hiệu,
có thể dùng tệp resource.h để định nghĩa.

Cách tổ chức tài nguyên
*.rc
... tài nguyên ...
5

resource.h

*.cpp

#define NAME 5
Use


5.2- Thực đơn (menu)


Cách tạo: VC tool / script
language


Mỗi mục chọn (item)
có ID, Popup,
Caption,…
 Cả menu cũng có ID
Xử lý menu thông qua
đối tượng Cmenu, gồm
các thao tác:




ID-menu MENU
{
POPUP “tên-mục”
{
MENUITEM “tên-mục” , ID-item
..............
}
.............
MENUITEM “tên-mục” , ID-item
.............
}


5.2- Thực đơn (menu)…


Gắn vào cửa sổ
CMenu a;
a.LoadMenu( ID-menu );

 . SetMenu( &a );



Lập trình xử lý mục chọn (item): theo quy tăc xử lý
thông điệp, mỗi item là một hàm xử lý & được ánh
xạ bằng:
ON_COMMAND( ID-item, tên-hàm )



Hiện thực đơn ngữ cảnh bằng:
CMenu :: TrackPopupMenu( flags, x,y, parent );
flags = { TPM_LEFTALIGN,...}


5.2- Thực đơn (menu)…


Lấy thực đơn hệ thống bằng:
CMenu * CWnd :: GetSystemMenu( 0 );



Một số hàm trong CMenu:









CreateMenu(); - tạo menu ngang
CreatePopupMenu(); - tạo menu dọc
AppendMenu( flags, id, text ); - thêm mục chọn
RemoveMenu( pos, flag ); - xóa mục chọn
GetSubMenu( int position ); - lấy menu dọc
GetMenuItemCount(); - lấy số mục chọn



5.3- Ảnh & biểu tượng


Biểu tượng (icon, cursor) là ảnh thu nhỏ




Cách tạo: VC tools / import từ các tệp *.ico, *.cur
Thiết lập ID cho mỗi biểu tượng trong RC
Đặt vào cửa sổ:


B1) Nạp biểu tượng vào chương trình
HICON
a = AfxGetApp() -> LoadIcon( ID-icon );
HCURSOR b = AfxGetApp() -> LoadCursor( ID-cursor );




B2) Thay đổi tham số lớp cửa sổ
SetClassLong( HWND , kiểu , (long) định-danh );
where : kiểu là GCL_HICON/HCURSOR; định-danh từ bước 1



AfxGetApp() là lệnh lấy đối tượng chương trình


5.3- Ảnh & biểu tượng…


CBitmap là lớp để xử lý ảnh bitmap


B1) Nạp ảnh từ tài nguyên vào CBitmap
CBitmap a ;
a . LoadBitmap( ID-bitmap );



B2) Sử dụng, chép lên màn hình bằng DC ảo
CDC b ;
b.CreateCompatibleDC(  );
b.SelectObject( &a );
 . BitBlt (x,y,w,h, &b, x’, y’, mode );




Hoặc sử dụng CImageList để xử lý
CImageList :: Create( bitmapID, cx, num_Img, mask_color );
CImageList :: Draw( CDC *dc, int img, POINT pt, UINT style);
where : style=ILD_NORMAL,...


5.3- Ảnh & biểu tượng…


Menu dạng ảnh: đặt các CBitmap vào mỗi item
bằng lệnh
CMenu :: SetMenuItemBitmaps( ID-pos , flag , Cbitmap *b1, Cbitmap *b2);
where : ID-pos là ID hoặc vị trí mục chọn, flag = MF_BYCOMMAND/BYPOSITION,
b1 là ảnh uncheck, b2 là ảnh check


5.4. Hộp thoại & lớp CDialog





Hộp thoại là một dạng cửa sổ đặc biệt, nó được tạo sẵn trong tài nguyên chương
trình và định danh bằng số hiệu (ID-Dialog).
Trên hộp thoại là các đối tượng điều khiển như: static, editbox, button,...
Ví dụ một hộp thoại:

Số hiệu hộp thoại


Hộp thoại đã được tạo

Các điều khiển có thể tạo
trên hộp thoại


5.4. Hộp thoại & lớp CDialog...



Hộp thoại được định nghĩa như sau, hoặc tạo bằng công cụ VC
số-hiệu-dialog DIALOG
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION “title”
FONT size,name
{
tên_điều_khiển
“text / caption” , số-hiệu , x,y, w,h, style
}



Các đối tượng điều khiển đơn giản gồm
Tên điều khiển

Ý nghĩa

Tham số kiểu - style

LTEXT


Văn bản tĩnh

SS_CENTER, SS_ICON,...

EDITTEXT

Nhập văn bản

ES_MULTILINE, ES_PASSWORD,...

PUSHBUTTON

Nút bấm

BS_PUSHBUTTON, BS_CHECKBOX, BS_RADIOBUTTON,...

LISTBOX

Danh sách

LBS_SORT, LBS_STANDARD, LBS_MULTIPLESEL,...

COMBOBOX

Ô chọn

CBS_DROPDOWN, CBS_SIMPLE,...



5.4. Hộp thoại & lớp CDialog...



Hộp thoại được quản lý bởi đối tượng lớp CDialog, gồm các phương thức xử lý sau:
CDialog( số-hiệu-dialog );
int CDialog :: DoModal();
void CDialog :: OnOk(); hoặc OnCancel()



Để xác định các đối tượng điều khiển và xử lý ta sử dụng hàm sau, ép kiểu về đối
tượng tương ứng.
biến_trỏ = (Kiểu_lớp *) CDialog :: GetDlgItem( số_hiệu_điều_khiển );




Các lớp tương ứng các điều khiển đơn giản: CStatic, CEdit, CButton, CListBox,
CComboBox
Cách lập trình hộp thoại và các điều khiển trên đó
B1) Xây dựng lớp hộp thoại kế thừa CDialog (nếu cần)
B2) Tạo đối tượng hộp thoại và đặt vào số hiệu hộp thoại đã định nghĩa
B3) Lập trình các phương thức trong lớp hộp thoại và sử dụng các biến trỏ lớp ứng với
các điều khiển để xác định dữ liệu trên các điều khiển của hộp thoại.


5.4. Hộp thoại & lớp CDialog...




Minh họa cho ví dụ
Lớp hộp thoại CD (kế thừa CDialog)

CString name, pass;
void OnOk()
{
CEdit *edit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
CEdit *edit2 = (CEdit*)GetDlgItem(IDC_EDIT2);
edit1->GetWindowText(name);
edit2->GetWindowText(pass);
CDialog::OnOK();
}


5.4. Các lớp xử lý control objects

Các thư viện

<afxext.h> & <afxcmn.h> & <afxdtctl.h>

CMonthCalCtrl

Chọn ngày tháng

CButton

Nút lệnh, đánh dấu, chọn

CListBox


Danh sách chọn

CComboBox

Danh sách chọn

CScrollBar

Thanh cuộn

CSpinButtonCtrl

Hộp tăng giảm

CProgressCtrl

Thanh chỉ báo

CSliderCtrl

Thanh trượt

CListCtrl

Danh sách các mục

CTreeCtrl

Cây các mục


CTabCtrl

Thẻ chọn

CAnimateCtrl

Chạy tệp AVI

CDateTimeCtrl

Chọn ngày tháng


5.?. LT biểu tượng khay hệ thống

Câu lệnh:
Shell_NotifyIcon( NIM_ADD , NOTIFYICONDATA * );
NOTIFYICONDATA { cbSize, hIcon, hWnd, szTip,
uCallbackMessage, uFlags, uID }
uFlags = NIF_ICON+NIF_MESSAGE+NIF_TIP
 Xử lý thông điệp trên biểu tượng: ánh xạ thông điệp tới một hàm
lớp cửa sổ
ON_MESSAGE( uCallbackMessage, tên_hàm )
 Mẫu hàm xử lý cho thông điệp trên
void tên_hàm ( WPARAM t1, LPARAM t2 ) { … }


t2 = thông điệp trên biểu tượng (WM_RBUTTONDOWN...)



5.5. Đối tượng thanh công cụ



Lớp xử lý là CToolBar (hoặc CToolBarCtrl), các bước tạo thanh công cụ như sau:
B1) Tạo một tài nguyên các nút lệnh của ToolBar
B2) Khai báo một đối tượng lớp CToolBar (thuộc lớp cửa sổ)
B3) Tạo một thanh công cụ cho đối tượng trên bằng lệnh
CToolBar :: Create( cửa-sổ-chứa );
B4) Nạp các nút lệnh từ tài nguyên vào đối tượng toolbar bằng lệnh
CToolBar :: LoadToolbar( số-hiệu );
B5) Hiển thị lên cửa sổ bằng các lệnh sau:
CToolBar :: EnableDocking( kiểu={CBRS_ALIGN_ANY,...} );
CFrameWnd :: EnableDocking( kiểu={CBRS_ALIGN_ANY,...} );
CFrameWnd :: DockControlBar( đối-tượng-toolbar );



Xử lý thông điệp khi chọn nút lệnh tương tự như thực đơn, có thể ánh xạ xử lý từng nút lệnh
hoặc nhiều nút lệnh:
ON_COMMAND( id_button, tên-hàm )
ON_COMMAND_RANGE( id_min, id_max, tên-hàm )


5.6. Đối tượng thanh trạng thái



Lớp xử lý là CStatusBar (hoặc CStatusBarCtrl), các bước tạo như sau:

B1) Tạo danh sách xâu ký tự trong tài nguyên để hiển thị trên trạng thái (nếu cần)
B2) Khai báo một đối tượng lớp CStatusBar (thuộc lớp cửa sổ)
B3) Tạo một thanh công cụ cho đối tượng trên bằng lệnh
CStatusBar :: Create( cửa-sổ-chứa );
B4) Đặt các thành phần trên thanh trạng thái
CStatusBar :: SetIndicators( UINT* p, int n );
CStatusBar :: SetPaneText( index, xâu-ký-tự );
CStatusBar :: SetPaneInfo( index, id, style, width );
style = {SBPS_NORMAL,...}



Các bước trên thực hiện sau lệnh Create() tạo cửa sổ và trước lệnh hiển thị cửa sổ.



×