Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu modülde minimal bir Windows masaüstü programı yazacağız. Tek yaptığı boş bir pencere oluşturmak ve göstermektir. Bu ilk program, boş satırları ve açıklamaları saymak yerine yaklaşık 50 satırlık kod içerir. Bu bizim başlangıç noktamız olacak; daha sonra grafik, metin, kullanıcı girişi ve diğer özellikleri ekleyeceğiz.
Visual Studio'da geleneksel bir Windows masaüstü uygulaması oluşturma hakkında daha fazla ayrıntı arıyorsanız bkz. İzlenecek Yol: Geleneksel bir Windows Masaüstü uygulaması oluşturma (C++).
Programın tam kodu aşağıdadır:
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
{
// Register the window class.
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
// Create the window.
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"Learn to Program Windows", // Window text
WS_OVERLAPPEDWINDOW, // Window style
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if (hwnd == NULL)
{
return 0;
}
ShowWindow(hwnd, nCmdShow);
// Run the message loop.
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// All painting occurs here, between BeginPaint and EndPaint.
FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
EndPaint(hwnd, &ps);
}
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
Visual Studio projesinin tamamını Windows Hello World Sampleadresinden indirebilirsiniz.
Bu kodun ne yaptığının kısa bir özetini vermek yararlı olabilir. Daha sonraki konular kodu ayrıntılı olarak inceler.
-
wWinMain program giriş noktasıdır. Program başladığında, uygulama penceresinin davranışı hakkında bazı bilgiler kaydeder. En önemli öğelerden biri, bu örnekteki
WindowProcadlı işlevin adresidir. Bu işlev pencerenin davranışını(görünümü, kullanıcıyla nasıl etkileşime geçtiğini vb.) tanımlar. - Ardından program pencereyi oluşturur ve pencereyi benzersiz olarak tanımlayan bir tanıtıcı alır.
- Pencere başarıyla oluşturulursa, döngü sırasında program bir girer. Kullanıcı pencereyi kapatıp uygulamadan çıkana kadar program bu döngüde kalır.
Uygulama mantığının çoğunun tanımlandığı yerin burası olduğunu söylememiz rağmen programın açıkça WindowProc işlevini çağırmadığını görebilirsiniz. Windows, bir diziiletisi geçirerek programınızla iletişim kurar.
döngüsü sırasında içindeki kod bu işlemi yönetir. Program DispatchMessage işlevini her çağırışında, dolaylı olarak Windows'un her ileti için bir kez WindowProc işlevini çağırmasına neden olur.
Bu bölümde
- Pencere Oluşturma
- Pencere İletileri
- Pencere Yordamı Yazma
- Pencereyi Boyama
- Pencere Kapatma
- Uygulama Durumu Yönetme
İlgili konular
-
C++'da Windows için Programlamayı Öğrenin