STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ
    Nội dung
    0
    0
    Chia sẻ

    Project Mẫu GDI+ với C++ Win32 API

    Project mẫu Win32 API GDI+ đã được cấu hình sẵn dành cho các dự án hoặc đồ án môn học liên quan đến đồ họa căn bản.
    02/06/2014 18/09/2020 2 phút đọc
    Project Mẫu GDI+ với C++ Win32 API

    Bài viết cung cấp 1 project mẫu đã được cấu hình để có thể tiếp tục lập trình với GDI+ Win32 API.

    • Khởi tạo GDI+.
    • Các thao tác vẽ cơ bản sử dụng GDI+.

    Phù hợp với các đồ án môn học tìm hiểu về các thuật toán vẽ đường như vẽ đường thẳng với Bresenham, Midpoint, đường cong Bézier hoặc vẽ các Fractal đệ quy, ...

    Download project mẫu GDI+

    STDIO_GDIPlus_VS2019.zip

    Giải thích mã nguồn

    Trong project này chỉ cần tập trung vào các file chính:

    • WinMain.cpp: dành cho việc khởi tạo project và có thể hiểu như đầu vào (Entry Point) của chương trình Win32 API vì nó chứa đầu vào của chương trình và các cài đặt cần thiết.
    • GlobalVars.h: chứa các biến toàn cục liên quan tới GDI+.
    • Application.h và Application.cpp: chứa tất cả các hàm liên quan đến việc khởi tạo và hủy các tài nguyên của GDI+, trong đó:
      • Hàm init: khởi tạo dữ liệu cho chương trình nếu cần.
      • Hàm run: được tự gọi lại liên tục, đặt các hàm cập nhật logic và vẽ tại đây.

    WinMain.cpp

    File này chứa code khởi tạo cửa sổ chương trình với Win32 API, có thể không cần quan tâm file này nhiều vì toàn bộ code cho chương trình chính được dời vào file Application.h và Application.cpp.

    GlobalVars.h

    extern Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    extern ULONG_PTR gdiplusToken;
    extern Gdiplus::Graphics* graphic;

    gdiplusStartupInputgdiplusToken là 2 biến dành cho việc khởi tạo tài nguyên và token nắm giữ tham chiếu đến GDI, nhờ nó để quản lý và hủy các tài nguyên vẽ GDI+ khi không cần sử dụng nữa.

    Đối tượng graphic lưu giữ các hàm để vẽ của GDI+, nếu đối tượng này khởi tạo không thành công thì không thể vẽ.

    Application.h và Application.cpp

    Để sử dụng GDI+ cần thư viện gdiplus.h (gdiplus.lib), toàn bộ thành phần liên quan GDI+ nằm trong namespace Gdiplus nên khi gọi các hàm của GDI+ thì cần thêm namespace Gdiplus:: trước đó.

    #include <gdiplus.h>
    #pragma comment(lib, "gdiplus.lib")
    Hàm khởi tạo init

    Khởi tạo GDI+ và khởi tạo đối tượng đồ họa graphic Application.cpp:

    void init()
    {
    	GdiplusStartup(&STDIO_gdiplusToken, &STDIO_gdiplusStartupInput, NULL);
    	graphic = new Gdiplus::Graphics(GetDC(STDIO_AppHandle));
    }
    Hàm hủy destroy

    Khi không cần dùng GDI+ nữa có thể gọi hàm này để hủy tài nguyên mà GDI+ đang nắm giữ.

    void destroy()
    {
    	delete graphic;
    	Gdiplus::GdiplusShutdown(gdiplusToken);
    }

    Hàm cập nhật logic và vẽ chính, muốn thêm thành phần vẽ thì thêm vào hàm này, đây là hàm chính để thao tác vẽ, cần tập trung thêm code vào hàm này.

    Có thể không cần quan tâm các hàm khác ngoài việc thao tác vẽ trong hàm này, tuy nhiên, nếu muốn thật sự hiểu biết về GDI+ thì nên tìm hiểu kỹ từng phần như đã giới thiệu ở trên.

    void run()

    Kết quả

    GDI+ trong Win32 API.
    0 Bình luận
    Modern C++

    Modern C++

    STDIO Training - Đào Tạo Lập Trình C++.

    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO

    Trang chính

    Công ty TNHH STDIO

    • 30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn
    • 383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012
    ©STDIO, 2013 - 2021