📌  相关文章
📜  interface grafica biblioteca WIN32 em Linguagem c (1)

📅  最后修改于: 2023-12-03 15:15:51.310000             🧑  作者: Mango

Interface gráfica biblioteca WIN32 em Linguagem C

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.

Como começar

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
);
Criando uma janela

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;
}
Adicionando componentes gráficos

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);
Conclusão

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.