DE THI NE

- 0 / 0
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Lê Thị Lịnh
Ngày gửi: 16h:39' 08-05-2009
Dung lượng: 61.5 KB
Số lượt tải: 25
Nguồn:
Người gửi: Lê Thị Lịnh
Ngày gửi: 16h:39' 08-05-2009
Dung lượng: 61.5 KB
Số lượt tải: 25
Số lượt thích:
0 người
Trường Đại học Sư phạm Kỹ thuật TP.HCM ĐỀ THI MÔN: LẬP TRÌNH WINDOWS
Khoa CNTT MÃ MÔN HỌC: 1279050
Bộ môn Công nghệ Phần mềm Đề số 01. Đề thi có 4 trang
----------------------- Thời gian: 90 phút
Không sử dụng tài liệu
-----------------------
Câu 1: (4 điểm)
Viết chương trình thực hiện thao tác vẽ một hình tròn ra chính giữa màn hình, sử dụng Win32 Application, với bán kính được nhập từ một hộp thoại.
Ghi chú:
Hộp thoại có ID là IDD_GETRADIUS, dạng modal, được gọi hiển thị khi người dùng chọn menu item IDM_GETRADIUS của cửa sổ chính.
Giá trị bán kính nhận được là một số nguyên từ edit có ID là IDC_RADIUS, kiểu Number. Hai nút nhấn còn lại trên hộp thoại có ID tương ứng là IDOK và IDCANCEL.
Màu tô cho hình tròn (kể cả đường biên) là màu đỏ, tức giá trị RGB(255, 0, 0).
Prototype một số hàm tham khảo:
int DialogBox(HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDlgFunc);
BOOL InvalidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase);
HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint);
BOOL GetClientRect(HWND hWnd, LPRECT lpRect);
HPEN CreatePen(int fnPenStyle, int nWidth, COLORREF crColor);
HBRUSH CreateSolidBrush(COLORREF crColor);
HGDIOBJ SelectObject(HDC hDC, HGDIOBJ hGDIObj);
BOOL DeleteObject(HGDIOBJ hGDIObj);
BOOL Ellipse(HDC hDC, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
UINT GetDlgItemInt(HWND hDlg, int iIDDlgItem, BOOL *lpTranslated, BOOL bSigned);
BOOL EndDialog(HWND hDlg, int nResult);
Chỉ cần viết các hàm xử lý của cửa sổ chính và hộp thoại, không yêu cầu phải thật chính xác như thực hành trên máy tính.
Câu 2: (4 điểm)
Viết chương trình thực hiện thao tác thông báo vị trí con trỏ chuột (trên hệ toạ độ vùng làm việc client area) ra chính giữa cửa sổ này với màu sắc theo các trạng thái nhấn của thiết bị chuột.
Ghi chú:
Nếu người dùng đang nhấn chuột trái thì chữ thể hiện thông báo có màu đỏ, nếu nhấn chuột phải thì chữ màu xanh lá cây, và nếu không nhấn thì có màu xanh da trời. Các màu tương ứng là RGB(255, 0, 0), RGB(0, 255, 0), và RGB(0, 0, 255).
Prototype một số hàm tham khảo:
int wsprintf(LPTSTR lpOut, LPCTSTR lpFormat <,…list of optional arguments>);
BOOL InvalidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase);
HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint);
BOOL GetClientRect(HWND hWnd, LPRECT lpRect);
COLORREF SetTextColor(HDC hDC, COLORREF crSetColor);
int DrawText(HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);
Chỉ cần viết hàm xử lý của cửa sổ chính (mặc định là WndProc), và không yêu cầu phải thật chính xác như thực hành trên máy tính.
Câu 3: (2 điểm)
Hãy giải thích đoạn code dưới đây, bằng cách cho biết mục đích của chương trình là gì, thể hiện qua các hàm, biến được cài đặt như thế nào, chương trình thực thi trong thực tế sẽ ra sao?
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hDC, hSrcMemDC, hDestMemDC;
HBITMAP hBmp, hOldBmp, hBlankBmp, hOldBlankBmp;
static RECT rBmp, rClient;
static POINT ptCenter, ptVirDist;
switch (message)
{
case WM_CREATE:
GetClientRect(hWnd, &rClient);
ptCenter.x = (rClient.right + rClient.left)/2;
ptCenter.y = (rClient.bottom + rClient.top)/2;
ptVirDist.x = BMP_WIDTH/2;
ptVirDist.y = BMP_HEIGHT/2;
// Ghi chú: BMP_WIDTH và BMP_HEIGHT là
// kích thước một ảnh trong tập tin tài nguyên
break;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
hSrcMemDC = CreateCompatibleDC(hDC);
hDestMemDC = CreateCompatibleDC(hDC);
hBmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_EXAM)); // Ảnh trong tập tin tài nguyên
hBlankBmp = CreateCompatibleBitmap(hDC, rClient.right, rClient.bottom);
hOldBmp = (HBITMAP)SelectObject(hSrcMemDC, hBmp);
hOldBlankBmp = (HBITMAP)SelectObject(hDestMemDC, hBlankBmp);
rBmp.left = ptCenter.x-ptVirDist.x;
rBmp.top = ptCenter.y-ptVirDist.y;
rBmp.right = ptCenter.x+
Khoa CNTT MÃ MÔN HỌC: 1279050
Bộ môn Công nghệ Phần mềm Đề số 01. Đề thi có 4 trang
----------------------- Thời gian: 90 phút
Không sử dụng tài liệu
-----------------------
Câu 1: (4 điểm)
Viết chương trình thực hiện thao tác vẽ một hình tròn ra chính giữa màn hình, sử dụng Win32 Application, với bán kính được nhập từ một hộp thoại.
Ghi chú:
Hộp thoại có ID là IDD_GETRADIUS, dạng modal, được gọi hiển thị khi người dùng chọn menu item IDM_GETRADIUS của cửa sổ chính.
Giá trị bán kính nhận được là một số nguyên từ edit có ID là IDC_RADIUS, kiểu Number. Hai nút nhấn còn lại trên hộp thoại có ID tương ứng là IDOK và IDCANCEL.
Màu tô cho hình tròn (kể cả đường biên) là màu đỏ, tức giá trị RGB(255, 0, 0).
Prototype một số hàm tham khảo:
int DialogBox(HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDlgFunc);
BOOL InvalidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase);
HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint);
BOOL GetClientRect(HWND hWnd, LPRECT lpRect);
HPEN CreatePen(int fnPenStyle, int nWidth, COLORREF crColor);
HBRUSH CreateSolidBrush(COLORREF crColor);
HGDIOBJ SelectObject(HDC hDC, HGDIOBJ hGDIObj);
BOOL DeleteObject(HGDIOBJ hGDIObj);
BOOL Ellipse(HDC hDC, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
UINT GetDlgItemInt(HWND hDlg, int iIDDlgItem, BOOL *lpTranslated, BOOL bSigned);
BOOL EndDialog(HWND hDlg, int nResult);
Chỉ cần viết các hàm xử lý của cửa sổ chính và hộp thoại, không yêu cầu phải thật chính xác như thực hành trên máy tính.
Câu 2: (4 điểm)
Viết chương trình thực hiện thao tác thông báo vị trí con trỏ chuột (trên hệ toạ độ vùng làm việc client area) ra chính giữa cửa sổ này với màu sắc theo các trạng thái nhấn của thiết bị chuột.
Ghi chú:
Nếu người dùng đang nhấn chuột trái thì chữ thể hiện thông báo có màu đỏ, nếu nhấn chuột phải thì chữ màu xanh lá cây, và nếu không nhấn thì có màu xanh da trời. Các màu tương ứng là RGB(255, 0, 0), RGB(0, 255, 0), và RGB(0, 0, 255).
Prototype một số hàm tham khảo:
int wsprintf(LPTSTR lpOut, LPCTSTR lpFormat <,…list of optional arguments>);
BOOL InvalidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase);
HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint);
BOOL GetClientRect(HWND hWnd, LPRECT lpRect);
COLORREF SetTextColor(HDC hDC, COLORREF crSetColor);
int DrawText(HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);
Chỉ cần viết hàm xử lý của cửa sổ chính (mặc định là WndProc), và không yêu cầu phải thật chính xác như thực hành trên máy tính.
Câu 3: (2 điểm)
Hãy giải thích đoạn code dưới đây, bằng cách cho biết mục đích của chương trình là gì, thể hiện qua các hàm, biến được cài đặt như thế nào, chương trình thực thi trong thực tế sẽ ra sao?
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hDC, hSrcMemDC, hDestMemDC;
HBITMAP hBmp, hOldBmp, hBlankBmp, hOldBlankBmp;
static RECT rBmp, rClient;
static POINT ptCenter, ptVirDist;
switch (message)
{
case WM_CREATE:
GetClientRect(hWnd, &rClient);
ptCenter.x = (rClient.right + rClient.left)/2;
ptCenter.y = (rClient.bottom + rClient.top)/2;
ptVirDist.x = BMP_WIDTH/2;
ptVirDist.y = BMP_HEIGHT/2;
// Ghi chú: BMP_WIDTH và BMP_HEIGHT là
// kích thước một ảnh trong tập tin tài nguyên
break;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
hSrcMemDC = CreateCompatibleDC(hDC);
hDestMemDC = CreateCompatibleDC(hDC);
hBmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_EXAM)); // Ảnh trong tập tin tài nguyên
hBlankBmp = CreateCompatibleBitmap(hDC, rClient.right, rClient.bottom);
hOldBmp = (HBITMAP)SelectObject(hSrcMemDC, hBmp);
hOldBlankBmp = (HBITMAP)SelectObject(hDestMemDC, hBlankBmp);
rBmp.left = ptCenter.x-ptVirDist.x;
rBmp.top = ptCenter.y-ptVirDist.y;
rBmp.right = ptCenter.x+
 









Các ý kiến mới nhất