Search…

Lập Trình Win32 API - Phần 3: Tạo Và Sử Dụng Resource

18/09/20205 min read
Resource - tài nguyên là một sức mạnh lớn trong việc lập trình bao gồm ứng dụng. Bài viết sau hướng dẫn phương pháp tạo và sử dụng resource - icon, menu, dialog với Win32 API.

Khái niệm 

Resource: tài nguyên được đưa từ bên ngoài vào chương trình, có thể là file ảnh, file âm thanh...

Resource Editor: công cụ của Microsoft, hỗ trợ đắc lực cho phép thêm các resource bên ngoài vào để quản lý, chỉnh sửa, xem trước, … và dịch toàn bộ quá trình thực hiện ra 1 file .rc viết dưới ngôn ngữ resource script, công cụ được tích hợp sẵn trên các bản Visual Studio trừ bản Express.

Bài viết hướng dẫn cách sử dụng Resource Editor chèn các resource vào phần mềm.

Hướng dẫn

Tạo 1 project tương tự như project ở bài viết tạo cửa số căn bản. 

Bước 1: tạo file resource

Chọn Solution Explorer (hoặc View -> Solution Explorer) -> Chuột phải vào mục Resource Files -> Add -> New Item -> Resource -> Resource Files. Sau đó đặt tên file tùy ý, thông thường là resource.rc.

Thêm resource file vào project Visual Studio

Sau khi tạo xong, Visual Studio tự động chuyển sang cửa sổ Resource View, tạo chuyển lại cửa sổ Solution Explorer. Hệ thống tự tạo cho 1 file là resource.h

Bước 2: chèn icon

Icon là một hình ảnh có kích cỡ nhỏ, đại diện cho chương trình. 

Double click vào file resource.rc sẽ được chuyển đến cửa sổ Resource Editor. Nhấp huột phải vào resource.rc chọn Add Resource và xuất hiện bảng sau.

Giao diện resource editor của Winform

Chọn nút Import

Thêm resource ảnh icon cho ứng dụng winform bằng Win32API

Chọn đường dẫn đến thư mục chứa icon.

Hiển thị resource ảnh icon trong winform với Win32API

Icon được tải lên sẽ lên sẽ có tên là IDI_ICON1 đây là tên hệ thống đặt.

Nếu cần đổi tên, bên dưới phần Properties (hoặc chuột phải -> Properties) sửa tên tại phần ID.

Thao tác trên file WinMain.cpp để tải được icon lên:

Thêm file header mà hệ thống tự tạo lúc tạo resource:

#include "resource.h"

Ở đoạn khởi tạo window class, các biến wc.hIconwc.hIconSm sửa lại như sau:

wc.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));
wc.hIconSm = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));

Giải thích:

  • GetModuleHandle(NULL): hàm này trả về con trỏ trỏ tới hInstance tức là tiến trình của phần mềm.
  • MAKEINTRESOURCE(IDI_ICON1): hàm này truy xuất vào resource mà đã tạo ra để lấy IDI_ICON1 mà đã thao tác ở trên.

Chạy thử chương trình

Giao diện Winform đã được cài đặt icon

Bước 3: tạo menu

Menu là một liệt kê các thao tác mà lập trình viên đưa ra cho người dùng sử dụng.

Tạo 2 lệnh cơ bản nhất là thoát chương trình và một lệnh sẽ đưa ra thông tin phần mềm đang tương tác.

Thêm resource menu cho Winform bằng Win32API

Trong cửa sổ Resource View, double click vào Menu / IDR_MENU1. 

Giao diện Resource View của Menu trong Winform

Tạo menu như sau: File / Exit và Help / About

Thêm file và edit cho menu trong Winform bằng Win32API

Thêm lệnh cho File / Exit. Chuột phải vào ô Exit -> Properties -> ID của Exit là ID_FILE_EXIT.

Trở lại với file WinMain.cpp ở đoạn code window class, sửa biến wc.lpszMenuName như sau:

wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);

WndProc, thêm trường hợp:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case ID_FILE_EXIT:
			PostQuitMessage(0);
			break; 
		case ID_HELP_ABOUT:
			break;
		}
	// ...
	}
	return 0;
}

Giải thích:

  • WM_COMMAND: Hiểu đơn giản ở đây, là message tương ứng với việc tương tác trên thanh menu, các nút button (tìm hiểu sau). Trong đó với các lệnh như WM_COMMAND có các biến hỗ trợ là wParamlParam
  • LOWORD(wParam): Thể hiện cho con số mà các trường hợp ví dụ cụ thể là ID_FILE_EXIT được định nghĩa ở resource.h, khi chọn File / Exit thì WM_COMMAND sẽ được gửi kèm với wParamlParam để phần mềm hiểu đang chọn lệnh nào.

Chạy thử chương trình và có thể thoát chương trình thông qua File / Exit.

Bước 4: tạo Dialog Box

Dialog Box là công cụ mà lập trình viên dùng để tương tác với người dùng của mình.

Tạo Dialog Box bằng các thao tác ở phần 2, 3 mà tạo Dialog Box.

Tạo DialogBoX trong Winform bằng Win32API

Double click vào Dialog:

Giao diện dialog được dựng bằng Win32API

Các bạn chọn View -> Tool Box, các bạn sẽ có được Dialog Editor như sau:

Giao diện Dialog Editor Win32API

Với các công cụ trên, tạo 1 Dialog như sau:

Giao diện Dialog Winform sử dụng resources với Win32API

Gợi ý: Kéo thả các button OK, Cancel, sử dụng Static Text để thêm đoạn text trên. Chọn Static Text, vào Properties -> Caption để chỉnh sửa văn bản, Properties -> Align Text -> Center để căn giữa.

Sau khi tạo được một Dialog như trên, đưa Dialog này vào chương trình.

Dialog Box là 1 cửa sổ, có các button là OK và Cancel vì vậy nó cũng cần một thủ tục riêng để vận hành, tương tự như WndProc.

BOOL CALLBACK AboutBox(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_INITDIALOG:
		return 1;
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDOK: 
			EndDialog(hwnd, IDOK);
			break;
		case IDCANCEL:
			EndDialog(hwnd, IDCANCEL);
			break;
		}
		break;
	default:
		return 0;
	}
	return 1;
}

Ý nghĩa của hàm trên tương tự với hàm WndProc và hàm WM_COMMAND .

Thêm trường hợp sau Help / About lên WndProc.

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		// ..
		case ID_HELP_ABOUT:
			DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), hwnd, AboutBox);
			break;
		}
	// ..
	}
	return 0;
}

Giải thích:

  • DialogBox(): là hàm đưa Dialog đã định nghĩa trên resource ra màn hình.
  • EndDialog(): hàm này sẽ kết thúc Dialog Box và trả về hàm DialogBox giá trị ở vế 2.

Download project demo Win32 hoàn chỉnh

Bài chung series

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024