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

[VC++ 6.0 MFC] Hướng dẫn tạo đồng hồ chạy ngược ppt

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 (117.79 KB, 5 trang )

[VC++ 6.0 MFC] Hướng dẫn tạo đồng hồ chạy ngược
Thư viện các class MFC của VC++ không có sẵn class Timer chuyên quản lý
thời gian, tuy nhiên 2 class CWindow và CWnd (cùng các class con của chúng
như CDialog) có method SetTimer(), đây là sự bao đóng của hàm API
Windows cùng tên, nó cho phép tạo 1 timer luận lý với thời gian đếm xác định,
mỗi lần timer đếm hết, nó tạo 1 thông báo tên là WM_TIMER gửi về cho cửa
sổ ứng dụng xử lý. Để thấy rõ việc dùng method Timer giải quyết bài toán cụ
thể của bạn, chúng tôi có viết 1 ứng dụng nhỏ demo đồng hồ chạy ngược bằng
VC++. Qui trình xây dựng ứng dụng cụ thể như sau:

1. chạy VC++, chọn menu File.New để hiển thị cửa sổ New. Chọn Project
"MFC ClassWizard (exe), chọn vị trí thư mục chứa Project, nhập tên Project là
DispTimer rồi OK để bắt đầu qui trình wizard.

2. Ở cửa sổ "Step 1", bạn chọn mục "Dialog Based" rồi chọn button Finish để
hoàn tất qui trình wizard tạo ứng dụng dùng giao diện Form (dialog - hộp
thoại).

3. Khi cửa sổ thiết kế Form ứng dụng hiển thị, bạn thiết kế Form có dạng sau:
Form gồm 1 label để hiển thị giá trị giờ và 2 button có sẵn là OK và Cancel để
dừng phần mềm khi cần.

4. Chọn menu View.ClassWizard, chọn class làm việc là CDispTimerDlg,
chọn tag "Member Variables" và định nghĩa biến kết hợp với đối tượng label
với tên là m_timer (kiểu CString). Trong lập trình, bạn sẽ truy xuất đối tượng
label thông qua biến m_timer.

5. Cũng trong cửa sổ ClassWizard, chọn tag "Message maps", chọn Object ID
là CDispTimerDlg, duyệt tìm và chọn hàm WindowProc(), nhấn button "Add
Function" để tạo hàm xử lý sự kiện cho Form giao diện rồi viết code cho hàm
này như sau:


LRESULT CDispTimerDlg::WindowProc(UINT message, WPARAM
wParam, LPARAM lParam) {
// TODO: Add your specialized code here and/or call the base class
char buf[256];
switch (message)
{
case WM_TIMER :
if (giay != 0) giay ;
else {// nếu thành phần giây = 0
giay = 59;
if (phut !=0) phut ;
else { // nếu thành phần phút = 0
phut = 59;
if (gio != 0) gio ;
else {// hết giờ
gio = phut = giay = 0;
}
}
}
//hiển thị thời gian còn lại lên Label Timer
UpdateData(TRUE);
wsprintf(buf,"%dh %dp %ds",gio,phut,giay);
m_timer = buf;
UpdateData(FALSE);
//xóa Timer
KillTimer(ID_TIMER);
}
return CDialog::WindowProc(message, wParam, lParam);
}
6. Hiển thị file DispTimerDlg.h (đặc tả interface sử dụng của class Form ứng

dụng), thêm lệnh định nghĩa 3 thuộc tính lưu giữ giá trị thời gian vào vị trí
thích hợp trong class:
int gio, phut, giay;
7. Hiển thị file DispTimerDlg.cpp (hiện thực class Form ứng dụng), thêm đoạn
lệnh khởi động timer và giá trị bắt đầu vào cuối hàm OnInitDialog():
#define ID_TIMER 55
BOOL CDispTimerDlg::OnInitDialog(){

// TODO: Add extra initialization here
// tạo timer đếm 1s = 1000ms
SetTimer(ID_TIMER,1000,NULL);
// khởi động giá trị đầu của đồng hồ
gio = 10; phut = 20; giay = 30;
//hiển thị đồng hồ lên Label Timer
char buf[256];
UpdateData(TRUE);
wsprintf(buf,"%dh %dp %ds",gio,phut,giay);
m_timer = buf;
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
8. chọn menu Build.Execute DispTimer.exe để thử dịch và chạy ứng dụng, nếu
làm đúng các bước trên đây, bạn sẽ thấy form hiển thị giờ giảm dần như bạn
yêu cầu.

Theo Pcworld

×