"Windows. h" library, what can I do?

Asked

Viewed 32,709 times

2

I’m starting in C language and would like to know what the "Windows. h" library matches?! it is responsible for what?! what kind of functions it allows me?!

2 answers

4

windows.h contains declarations for all functions of the Windows API, all common macros used by Windows developers, and all types of data used by the various functions and subsystems.

Enables you to do things like:

  • Create windows and buttons.
  • Enumerate files from a directory.
  • View system information(eg processes, services, windows).
  • Things like that.

Look at this índice da API do Windows(ᵉᶰ), this should be useful to read.

Wikipedia

Simple example, a window:

#include <windows.h>

const char g_szClassName[] = "ClassedaJanela";

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,
        "Simple Window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
        NULL, NULL, hInstance, NULL);

    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // Step 3: The Message Loop
    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}
  • DBX8 all the examples I saw using this library gave error, I’m after an example, lines of code using this library, I saw examples to mess with windows functions like interfaces, little dolls moving at last.. but everyone I saw made a mistake.

  • 1

    "all the examples I’ve seen using this library have gone wrong" - I recommend using tutorials, and starting with something less advanced than using the Windows API.

0


Adding the DBX8 response, such as the windows.h is specific to Windows, you should take special care when developing codes that you want to reuse on other systems.

For example, when you do include:

#include <Windows.h>

You limit your code to Windows.
But with the following code, you address this issue:

#ifdef _WIN32 

// O #ifdef acima garante que o sistema é Windows pois
// o compilador possui _WIN32 definido para os sistemas Windows,
// mas não em outros sistemas.
#include <Windows.h>

#else // ou #elif TESTE_DO_SISTEMA

// #includes do outro sistemas alvo.
#include <gtk/gtk.h>

#endif

And, logically, the implementation of the code will be different for each system. Even if your goal is not to support other systems, it is good to add at least the following:

#ifdef _WIN32 

#include <Windows.h>
// Outros includes 

#else

// Dá mensagem de erro informando que o sistemas não é suportado.
#error "Sistema nao suportado."

#endif

Browser other questions tagged

You are not signed in. Login or sign up in order to post.