📅  最后修改于: 2023-12-03 15:15:51.310000             🧑  作者: Mango
A biblioteca WIN32 é uma ferramenta muito útil para a criação de interfaces gráficas em linguagem C. Essa biblioteca contém funções que permitem interagir com o sistema Windows e criar janelas, botões, caixas de texto e outros componentes gráficos.
Para usar a biblioteca WIN32, é necessário incluir o arquivo de cabeçalho "windows.h" no seu código. Esse arquivo contém as definições das funções e tipos de dados utilizados pela biblioteca.
#include <windows.h>
A partir daí, é possível usar as funções da biblioteca para criar janelas e outros componentes gráficos. As funções principais para a criação de janelas são RegisterClassEx
e CreateWindowEx
.
ATOM RegisterClassEx(const WNDCLASSEX *lpwcx);
HWND CreateWindowEx(
DWORD dwExStyle,
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam
);
Para criar uma janela, é necessário definir uma classe para ela e depois criar a janela em si. A classe define as características da janela, como o seu nome, ícone e procedimento de janela.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wcex;
HWND hWnd;
MSG msg;
// Registra a classe da janela
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "MyWindowClass";
wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);
RegisterClassEx(&wcex);
// Cria a janela
hWnd = CreateWindowEx(0, "MyWindowClass", "Minha Janela",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
MessageBox(NULL, "Não foi possível criar a janela", "Erro", MB_ICONERROR);
return 1;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// Loop de mensagens
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
Além da janela em si, é possível adicionar outros componentes gráficos, como botões, caixas de texto e listas. Para isso, basta criar os componentes usando as funções da biblioteca WIN32 e adicioná-los à janela.
HWND hWndButton = CreateWindow("BUTTON", "Meu botão",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
50, 50, 100, 24,
hWnd, (HMENU)ID_MY_BUTTON, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), NULL);
HWND hWndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE,
50, 80, 400, 200,
hWnd, (HMENU)ID_MY_EDIT, hInstance, NULL);
HWND hWndList = CreateWindow("LISTBOX", "",
WS_CHILD | WS_VISIBLE | WS_BORDER | LBS_NOTIFY,
50, 300, 400, 100,
hWnd, (HMENU)ID_MY_LIST, hInstance, NULL);
Com a biblioteca WIN32 e um pouco de conhecimento em linguagem C, é possível criar interfaces gráficas completas e funcionais no Windows. Existem muitos componentes gráficos e recursos disponíveis para serem explorados, de modo que as possibilidades são praticamente infinitas.