Danh mục

Đồ họa và các đối tượng GDI

Số trang: 25      Loại file: pdf      Dung lượng: 418.96 KB      Lượt xem: 10      Lượt tải: 0    
Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDIWindows cung cấp một tính năng rất đặc sắc, đó là khả năng đồ họa độc lập thiết bị được xây dựng trên kỹ thuật GDI (giao diện giao tiếp với các thiết bị đồ họa khác nhau). GDI là thư viện đồ họa của Windows, cung cấp tất cả hàm phục vụ cho các thao tác kết xuất hình ảnh và văn bản ra thiết bị. GDI có thể vẽ ra nhiều loại thiết bị khác nhau: • Màn hình • Máy in • Máy vẽ GDI có trách nhiệm giao tiếp và...
Nội dung trích xuất từ tài liệu:
Đồ họa và các đối tượng GDI ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDIMỞ ĐẦUWindows cung cấp một tính năng rất đặc sắc, đó là khả năng đồ họa độc lập thiết bị đượcxây dựng trên kỹ thuật GDI (giao diện giao tiếp với các thiết bị đồ họa khác nhau). GDIlà thư viện đồ họa của Windows, cung cấp tất cả hàm phục vụ cho các thao tác kết xuấthình ảnh và văn bản ra thiết bị.GDI có thể vẽ ra nhiều loại thiết bị khác nhau: • Màn hình • Máy in • Máy vẽGDI có trách nhiệm giao tiếp và kết xuất các yêu cầu mà người dùng chuyển cho nó đếnđúng thiết bị đích. Về cơ bản, nó giao tiếp với các trình điều khiển thiết bị (các tập tin.drv), thật ra các trình điều khiển thiết bị cũng là một giao diện do Windows đưa ra, dođó trách nhiệm nặng nề không thật sự thuộc về GDI của Windows mà là của các nhà sảnxuất thiết bị phần cứng, họ buộc phải cung cấp trình điều khiển theo giao diện này nếumuốn bán được sản phẩm cho người dùng Windows. Như vậy, người lập trình không cầnquan tâm đến việc điều khiển trực tiếp thiết bị xuất mà chỉ cần quan tâm đến thư việnhàm GDI.Chương này sẽ trình bày các khái niệm cơ sở về GDI như device context, các hàm GDIcơ sở để vẽ và tô, các hàm để nạp và zoom ảnh bitmap. Phần cuối chương sẽ trình bàycách lấy về handle device context của máy in và một số hàm cơ sở sử dụng cho việc điềukhiển in ấn.Tóm lại, Windows cung cấp khả năng sử dụng cùng một hàm để kết xuất ra nhiều thiết bịkhác nhau. Điều này làm cho chương trình độc lập với thiết bị.DEVICE CONTEXTDevice context là một thiết bị xuất logic, liên kết với một thiết bị xuất vật lý cụ thể.Windows không cho phép chúng ta kết xuất trực tiếp ra thiết bị vật lý mà phải thông quahandle của device context. Handle device context là một số nguyên không dấu đượcWindows cấp như một định danh của device context.Ví dụ 1 : Xuất dòng chữ Hello Windows 2000 ra màn hìnhHDC hDC;/* Lấy device context của cửa sổ */hDC=GetDC(hWnd);/* Xuất dòng chữ Hello Windows 2000 ra cửa sổ tại vị trí (20,20) */TextOut(hDC, 20, 20, Hello Windows 2000, 18);/*Giải phóng Device Context */RealeaseDC(hWnd, hDC);Ví dụ 2 : Vẽ hình chữ nhậtHDC hDC;HPEN hPen, oldHPen;/* Lấy về device context của cửa sổ */hDC=GetDC(hWnd);/* Tạo bút vẽ mới với nét liền, độ dày 5, màu xanh */hPen=CreatePen(PS_SOLID, 5, RGB(0, 0, 255));/* Chọn bút vẽ hiện hành là bút vẽ mới và lưu lại bút vẽ cũ */oldHPen=(HPEN)SelectObject(hDC, hPen);/* Vẽ hình chữ nhật */Rectangle(hDC, 20, 20, 100, 100);/* Restore lại bút vẽ cũ */SelectObject(hDC, oldHPen);/* Giải phóng bút vẽ đã tạo ra */DeleteObject(hPen);/* Giải phóng device context */ReleaseDC(hWnd, hDC);Thao tác lấy về và giải phóng Device ContextCó 3 cách để nhận về và giải phóng một Device Context : • Sử dụng hàm BeginPaint và EndPaint khi xử lý thông điệp WM_PAINT:hDC = BeginPaint(hWnd, &ps);// Xử lý …………EndPaint(hWnd, &ps);Biến ps là một cấu trúc kiểu PAINTSTRUCT. • Dùng hàm GetDC và ReleaseDC khi xử lý các thông điệp khác WM_PAINT:hDC = GetDC(hWnd);//Xử lý …………ReleaseDC(hWnd, hDC); • Dùng hàm GetWindowDC và ReleaseDC :hDC = GetWindowDC(hWnd);// Xử lý …………ReleaseDC(hWnd, hDC);Lưu ý : Các hàm GetDC và BeginPaint trả về device context cho vùng client của cửasổ, riêng hàm GetWindowDC trả về device context của toàn bộ cửa sổ kể cả thanh tiêuđề, menu, thanh cuộn… và tất nhiên là cả vùng client. Để vẽ ra ngoài vùng làm việc(client area), phải chặn thông điệp WM_NCPAINT( NC: None Client). Ngoài ra, còn cóthể nhận về device context của toàn màn hình bằng hàm:hDC = CreateDC( DISPLAY, NULL, NULL, NULL);Tạo lập và giải phóng memory device contextMemory device context(MDC)là một device context ảo không gắn với một thiết bị xuấtcụ thể nào. Muốn kết quả kết xuất ra thiết bị vật lý ta phải chép MDC lên một devicecontext thật sự(device context có liên kết với thiết bị vật lý). MDC thường được dùngnhư một device context trung gian để vẽ trước khi thực sự xuất ra thiết bị, nhằm giảm sựchớp giật nếu thiết bị xuất là window hay màn hình.Để tạo MDC tương thích với một hDC cụ thể, sử dụng hàm CreateCompatibleDC:HDC hMemDC;hMemDC = CreateCompatibleDC(hDC);Đơn giản hơn, có thể đặt NULL vào vị trí hDC, Windows sẽ tạo một device contexttương thích với màn hình.Hủy MDC bằng hàm DeleteDC.MDC có bề mặt hiển thị như một thiết bị thật. Tuy nhiên, bề mặt hiển thị này lúc đầu rấtnhỏ, chỉ là một pixel đơn sắc. Không thể làm gì với một bề mặt hiển thị chỉ gồm 1 bit nhưvậy. Do đó cần làm cho bề mặt hiển thị này rộng hơn bằng cách chọn một đối tượngbitmap GDI vào MDC:SelectObject(hMemDC, hBitmap);Chỉ có thể chọn đối tượng bitmap vào MDC, không thể chọn vào một device context cụthể được.Sau khi chọn một đối tượng bitmap cho MDC, có thể dùng MDC như một device contextthật sự.Sau khi được hoàn tất trong MDC, ảnh đư ...

Tài liệu được xem nhiều: