WinAPI nedir? değiştir

WinAPI (Win32 API olarak da bilinir; resmî olarak Microsoft Windows API olarak adlandırılır), Windows özelliklerine erişime izin vermek için Microsoft tarafından C ile yazılmış bir uygulama programlama arabirimidir. WinAPI'nin ana bileşenleri:

  • WinBase: Çekirdek fonksiyonları, CreateFile, CreateProcess, vb.
  • WinUser: GUI fonksiyonları, CreateWindow, RegisterClass, etc
  • WinGDI: Grafik fonksiyonları, Ellipse, SelectObject, vb.
  • Ortak kontroller: Standart kontroller, liste görünümleri, kaydırıcılar, vb.

WinAPI neden kullanılır? değiştir

C programlama dilinin özellikleri sıralanırken genellikle C ile yazılan programların taşınabilir olduğundan söz edilmektedir. Ancak yazdığınız programın taşınabilir olması sizin için önemli değilse ve sadece Windows'ta GTK, Qt, vb. kütüphanelerden bağımsız olarak çalışmasını amaçlıyorsanız WinAPI'yi kullanabilirsiniz.

Hello World değiştir

WinAPI ile basit bir GUI örneği olarak Windows mesaj kutusu oluşturan C kodudur:

 
Hello World kodunun Tiny C ile derlenmiş hâlinin Windows 10'daki görünümü.
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    return MessageBox(NULL, "hello, world", "Merhaba dünya!", 0);
}

Programın açıklaması:

  • İlk adım, windows başlık dosyalarını eklemektir. Tüm Windowslar için ana başlık windows.h'dir, ancak başka başlık dosyaları da vardır.
  • WinMain, konsol uygulamalarında kullanılan standart int main () fonksiyonundan farklıdır. Arayüzde kullanılan daha fazla parametre vardır ve daha da önemlisi, bir pencere uygulamasının ana giriş noktası standart C / C ++ 'dan farklı bir çağrı düzeni kullanır.
  • APIENTRY niteleyicisi, argümanların yığına itildiği sıra olan çağırma düzenini belirtir. Varsayılan olarak çağırma düzeni, __cdecl ile belirtilen standart C düzenleridir. Ancak Microsoft, __stdcall niteleyicisi tarafından belirtilen Windows API fonksiyonları için farklı türde bir çağırma düzeni (PASCAL düzeni) kullanır. APIENTRY, windows.h'nin içerdiği başlık dosyalarından birinde __stdcall için tanımlanmış bir addır.