Návod: Vytvoření tradiční desktopové aplikace pro Windows (C++)
Tento návod ukazuje, jak vytvořit tradiční desktopovou aplikaci pro Windows v sadě Visual Studio. Aplikace, kterou vytvoříte, používá rozhraní API systému Windows k zobrazení "Hello, Windows desktop!" v okně. Kód, který vyvíjíte v tomto názorném postupu, můžete použít jako vzor k vytváření desktopových aplikací pro Windows.
Rozhraní API systému Windows (označované také jako rozhraní API Win32, desktopové rozhraní API systému Windows a klasické rozhraní API pro Windows) je architektura založená na jazyce C pro vytváření aplikací pro Windows. Používá se k vytváření aplikací pro Windows po celá desetiletí. Pokročilejší a snadněji programové architektury jsou postavené na rozhraní API systému Windows. Například MFC, ATL, rozhraní .NET. I nejnovější prostředí Windows Runtime kód pro aplikace pro UPW a Store napsané v jazyce C++/WinRT používá rozhraní API pro Windows pod ním. Další informace o rozhraní API systému Windows naleznete v tématu Index rozhraní API systému Windows.
Důležité
Část Sestavit kód na konci tohoto dokumentu zobrazuje úplný kód. Tento názorný postup popisuje různé části kódu, které se nacházejí v aplikaci pro Windows, ale nebudete kódovat, protože v fragmentech kódu jsou vynechány některé podrobnosti, abyste se mohli zaměřit na nejdůležitější části. Kompletní kód můžete zkopírovat a vložit ho do projektu na konci.
Požadavky
Počítač se systémem Microsoft Windows 7 nebo novějšími verzemi. Pro nejlepší vývojové prostředí doporučujeme Windows 11 nebo novější.
Kopie sady Visual Studio. Informace o tom, jak stáhnout a nainstalovat Visual Studio, naleznete v tématu Instalace sady Visual Studio. Při spuštění instalačního programu se ujistěte, že je zaškrtnuto vývoj desktopových aplikací s úlohou C++ . Nedělejte si starosti, pokud jste tuto úlohu nenainstalovali při instalaci sady Visual Studio. Instalační program můžete spustit znovu a nainstalovat ho.
Základní znalost používání integrovaného vývojového prostředí sady Visual Studio Pokud jste už dřív používali desktopové aplikace pro Windows, pravděpodobně budete mít přehled. Úvod najdete v tématu Prohlídka funkcí integrovaného vývojového prostředí sady Visual Studio.
Pochopení dostatečného množství základů jazyka C++, abyste mohli pokračovat. Nemějte obavy, neděláme nic moc složitého.
Vytvoření desktopového projektu Windows
Podle těchto kroků vytvořte svůj první desktopový projekt Windows. Podle poznámky na začátku tohoto návodu je dokončený kód k dispozici v části Sestavení kódu na konci návodu. Pokračujte a postupujte podle kroků k vytvoření projektu, ale až do konce vydržte vložení následujících částí kódu, až se zobrazí kompletní kód aplikace. Některé podrobnosti se v fragmentech kódu vynechávají, aby se zaměřily na nejdůležitější části. Kompletní kód můžete zkopírovat a vložit ho do projektu na konci.
Zjednodušení vysvětlení. Pokud chcete zobrazit dokumentaci pro upřednostňovanou verzi sady Visual Studio, použijte ovládací prvek selektoru verzí . Nachází se v horní části obsahu na této stránce.
Vytvoření desktopového projektu Windows v sadě Visual Studio
V hlavní nabídce zvolte Soubor>nový>projekt a otevřete dialogové okno Vytvořit nový projekt.
V horní části dialogového okna nastavte jazyk na C++, nastavte platformu pro Windows a nastavte typ projektu na Desktop.
V filtrovaném seznamu typů projektů zvolte Průvodce plochou systémem Windows a pak zvolte Další. Na další stránce zadejte název projektu, například DesktopApp.
Zvolte tlačítko Vytvořit a vytvořte projekt.
Zobrazí se dialogové okno Desktopový projekt windows. V rozevíracím seznamu Typ aplikace se ujistěte, že jste vybrali Desktopovou aplikaci (.exe). Vzhledem k tomu, že vytváříme aplikaci pro Windows, výsledkem výběru konzolové aplikace bude projekt, který nebude sestavovat s ohledem na kód, který použijeme. Potom v části Další možnosti vyberte Prázdný projekt. Zvolte OK a vytvořte projekt.
V Průzkumník řešení klikněte pravým tlačítkem na projekt DesktopApp, zvolte Přidat a pak zvolte Nová položka.
Animace zobrazuje kliknutí pravým tlačítkem myši na název projektu v Průzkumník řešení, výběr možnosti Přidat v nabídce, která se zobrazí, a pak zvolte Nová položka.
V dialogovém okně Přidat novou položku vyberte soubor C++ (.cpp). Do pole Název zadejte název souboru, například HelloWindowsDesktop.cpp. Zvolte položku Přidat.
Projekt se teď vytvoří a zdrojový soubor se otevře v editoru.
Vytvoření desktopového projektu Windows v sadě Visual Studio 2017
V nabídce Soubor zvolte Nový a pak zvolte Projekt.
V dialogovém okně Nový projekt v levém podokně rozbalte nainstalovaný>Visual C++ a pak vyberte Plochu systému Windows. V prostředním podokně vyberte Průvodce plochou systémem Windows.
Do pole Název zadejte název projektu, například DesktopApp. Vyberte OK.
V dialogovém okně Desktopový projekt systému Windows v části Typ aplikace vyberte aplikaci systému Windows (.exe). V části Další možnosti vyberte Prázdný projekt. Ujistěte se, že není vybraná předkompilovaná hlavička . Zvolte OK a vytvořte projekt.
V Průzkumník řešení klikněte pravým tlačítkem na projekt DesktopApp, zvolte Přidat a pak zvolte Nová položka.
Animace zobrazuje kliknutí pravým tlačítkem myši na název projektu v Průzkumník řešení, výběr možnosti Přidat v nabídce, která se zobrazila, a poté zvolením možnosti Nová položka.
V dialogovém okně Přidat novou položku vyberte soubor C++ (.cpp). Do pole Název zadejte název souboru, například HelloWindowsDesktop.cpp. Zvolte položku Přidat.
Projekt se teď vytvoří a zdrojový soubor se otevře v editoru.
Vytvoření desktopového projektu Windows v sadě Visual Studio 2015
V nabídce Soubor zvolte Nový a pak zvolte Projekt.
V dialogovém okně Nový projekt v levém podokně rozbalte nainstalované>šablony>Visual C++ a pak vyberte Win32. V prostředním podokně vyberte Win32 Project.
Do pole Název zadejte název projektu, například DesktopApp. Vyberte OK.
Na stránce Přehled v Průvodci aplikací Win32 zvolte Další.
Na stránce Nastavení aplikace v části Typ aplikace vyberte aplikaci pro Windows. V části Další možnosti zrušte zaškrtnutí políčka Předkompilované záhlaví a pak vyberte Prázdný projekt. Zvolte Dokončit a vytvořte projekt.
V Průzkumník řešení klikněte pravým tlačítkem na projekt DesktopApp, zvolte Přidat a pak zvolte Nová položka.
Animace zobrazuje kliknutí pravým tlačítkem myši na název projektu v Průzkumník řešení, výběr možnosti Přidat v nabídce, která se zobrazí, a pak zvolte Nová položka.
V dialogovém okně Přidat novou položku vyberte soubor C++ (.cpp). Do pole Název zadejte název souboru, například HelloWindowsDesktop.cpp. Zvolte položku Přidat.
Projekt se teď vytvoří a zdrojový soubor se otevře v editoru.
Kód
Dále se dozvíte, jak v sadě Visual Studio vytvořit kód pro desktopovou aplikaci pro Windows.
Kde se spustí kód v desktopové aplikaci pro Windows
Stejně jako každá aplikace jazyka C a aplikace jazyka C++ musí mít
main
funkci jako výchozí bod, každá desktopová aplikace windows musí mítWinMain
funkci.WinMain
má následující syntaxi.int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow );
Informace o parametrech a návratové hodnotě této funkce naleznete v tématu WinMain vstupní bod.
Poznámka:
Jaká jsou všechna tato nadbytečná slova, například
WINAPI
, neboCALLBACK
, neboHINSTANCE
, nebo_In_
? Tradiční rozhraní API systému Windows používá typedefs a makra preprocesoru, která výrazně abstrahují některé podrobnosti o typech a kódu specifickém pro platformu, jako jsou konvence volání,__declspec
deklarace a direktivy kompilátoru. V sadě Visual Studio můžete pomocí funkce Rychlé informace technologie IntelliSense zjistit, co tyto definice typedefs a makra definují. Najeďte myší na slovo, které vás zajímá, nebo ho vyberte a stiskněte Ctrl+K, ctrl+I pro malé automaticky otevírané okno, které obsahuje definici. Další informace najdete v tématu Použití technologie IntelliSense. Parametry a návratové typy často používají poznámky SAL k zachycení programovacích chyb. Další informace naleznete v tématu Použití poznámek SAL ke snížení vad kódu C/C++.Desktopové programy windows vyžadují
<windows.h>
. Často se také uvidíte#include <tchar.h>
. To usnadňuje psaní aplikace, která může pracovat s aplikacíchar
nebowchar_t
. Funguje to tak, že místo toho použijeteTCHAR
makro v kódu, které se nakonec přeloží nawchar_t
to, jestliUNICODE
je symbol definovaný v projektu, jinak se přeloží nachar
. Pokud vždy vytváříte s povoleným kódováním UNICODE, nepotřebujeteTCHAR
a můžete je používatwchar_t
přímo. Další informace naleznete v tématu Použití mapování obecného textu. Následující kód ukazuje tyto dva#include
příkazy v horní části souboru.#include <windows.h> #include <tchar.h>
Spolu s funkcí
WinMain
musí mít každá desktopová aplikace Windows také funkci procedury okna. Tato funkce se nazýváWndProc
, ale můžete jí dát jakýkoli název, který se vám v kódu líbí.WndProc
má následující syntaxi.LRESULT CALLBACK WndProc( _In_ HWND hWnd, _In_ UINT message, _In_ WPARAM wParam, _In_ LPARAM lParam );
V této funkci napíšete kód pro zpracování zpráv , které aplikace obdrží z Windows, když dojde k událostem . Pokud například uživatel ve vaší aplikaci zvolí tlačítko OK, systém Windows vám pošle zprávu. Kód napíšete uvnitř
WndProc
funkce, která dělá cokoli, co je vhodné. Označuje se jako zpracování události. Zpracováváte pouze události, které jsou relevantní pro vaši aplikaci.Další informace naleznete v tématu Procedury okna.
Přidání funkcí do WinMain
funkce
WinMain
Ve funkci potřebujete zachytit některé základní informace o hlavním okně. Uděláte to vyplněním struktury typuWNDCLASSEX
. Struktura obsahuje informace o okně, jako je ikona aplikace, barva pozadí okna, název, který se má zobrazit v záhlaví, mimo jiné. Důležité je, že obsahuje ukazatel funkce na proceduru okna, která zpracovává zprávy, které Windows odesílá do vaší aplikace. Následující příklad ukazuje typickouWNDCLASSEX
strukturu:WNDCLASSEX wcex; 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(wcex.hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);
Informace o polích výše uvedené struktury naleznete v tématu
WNDCLASSEX
.Jakmile strukturu vyplníte, zaregistrujete
WNDCLASSEX
ji ve Windows, aby věděla o okně a o tom, jak do ní odesílat zprávy.RegisterClassEx
Použijte funkci a předejte strukturu třídy okna jako argument. Makro_T
se používá, protože používámeTCHAR
typ pro diskuzi o kódu Unicode výše. Následující kód ukazuje, jak zaregistrovat třídu okna.if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; }
Dále vytvoříte okno pomocí
CreateWindowEx
funkce.static TCHAR szWindowClass[] = _T("DesktopApp"); static TCHAR szTitle[] = _T("Windows Desktop Guided Tour Application"); // The parameters to CreateWindowEx explained: // WS_EX_OVERLAPPEDWINDOW : An optional extended window style. // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, length) // NULL: the parent of this window // NULL: this application does not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindowEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; }
Tato funkce vrátí
HWND
popisovač okna. Úchyt je poněkud jako ukazatel. Systém Windows ho používá ke sledování vytvářených oken. Další informace naleznete v tématu Datové typy Systému Windows.V tomto okamžiku se okno vytvořilo, ale přesto musíme windows říct, aby bylo viditelné. To je to, co tento kód dělá:
// The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindow // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
Zobrazené okno je jenom prázdný obdélník, protože jste funkci ještě neimplementovali
WndProc
. Aplikace zatím nezachází se zprávami, které do ní systém Windows odesílá.Abychom mohli zprávy zpracovat, nejprve přidáme to, čemu se říká smyčka zpráv, která naslouchá zprávám odesílaných systémem Windows. Když aplikace obdrží zprávu, tato smyčka ji odešle do vaší
WndProc
funkce, která se má zpracovat. Smyčka zprávy se podobá následujícímu kódu:MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam;
Další informace o strukturách a funkcích ve smyčce zpráv naleznete v tématu
MSG
, ,GetMessage
TranslateMessage aDispatchMessage
.Základní
WinMain
funkce, která vytvoří hlavní okno aplikace a naslouchá zprávám, které Windows odesílá vaši aplikaci, by vypadalo podobně jako následující kód:int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wcex; 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(wcex.hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // Store instance handle in our global variable hInst = hInstance; // The parameters to CreateWindowEx explained: // WS_EX_OVERLAPPEDWINDOW : An optional extended window style. // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, length) // NULL: the parent of this window // NULL: this application dows not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindow failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindow // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // Main message loop: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; }
Zpracování zpráv ve WndProc
funkci
Ke zpracování zpráv, které aplikace obdrží, implementujete
switch
ve svéWndProc
funkci příkaz.Důležitá zpráva, která se má zpracovat, je
WM_PAINT
. Aplikace obdržíWM_PAINT
zprávu, když musí být aktualizována část zobrazeného okna. Událost může nastat, když uživatel přesune okno před okno a znovu ho přesune. Tato zpráva se zobrazí při prvním zobrazení okna, takže máte možnost zobrazit uživatelské rozhraní aplikace. Aplikace o těchto událostech zjistí, když je Systém Windows odešle. Při prvním zobrazení okna je nutné aktualizovat všechna okna.Pokud chcete zpracovat
WM_PAINT
zprávu, nejprve zavolejteBeginPaint
a pak zpracujte veškerou logiku pro rozložení textu, tlačítek a dalších ovládacích prvků v okně. Pak zavolejteEndPaint
. Pro tuto aplikaci se kód meziBeginPaint()
aEndPaint()
zobrazíHello, Windows desktop!
v okně, ve které jste vytvořili .WinMain()
V následujícím kóduTextOut
funkce zobrazí text v zadaném umístění v okně.PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T("Hello, Windows desktop!"); switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, Windows desktop!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application-specific layout section. EndPaint(hWnd, &ps); break; }
V předchozím kódu
HDC
je popisovač kontextu zařízení, který je přidružený k klientské oblasti okna. Použijete ho při kreslení v okně k odkazování na jeho klientskou oblast. Pomocí funkcíBeginPaint
seEndPaint
připravte na výkres v klientské oblasti a dokončete ho.BeginPaint
vrátí popisovač kontextu zobrazovacího zařízení použitého pro kreslení v klientské oblasti;EndPaint
ukončí žádost o malování a uvolní kontext zařízení.Aplikace obvykle zpracovává mnoho dalších zpráv. Odešle se například
WM_CREATE
při prvním vytvoření okna aWM_DESTROY
při zavření okna. Následující kód ukazuje základní, ale úplnouWndProc
funkci:LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T("Hello, Windows desktop!"); switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, Windows desktop!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application specific layout section. EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }
Sestavení kódu
Jak jsme slíbili, kompletní kód pro pracovní aplikaci následuje.
Sestavení tohoto příkladu
Odstraňte veškerý kód v HelloWindowsDesktop.cpp v editoru. Zkopírujte tento ukázkový kód a vložte ho do HelloWindowsDesktop.cpp:
// HelloWindowsDesktop.cpp // compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c #include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> // Global variables // The main window class name. static TCHAR szWindowClass[] = _T("DesktopApp"); // The string that appears in the application's title bar. static TCHAR szTitle[] = _T("Windows Desktop Guided Tour Application"); // Stored instance handle for use in Win32 API calls such as FindResource HINSTANCE hInst; // Forward declarations of functions included in this code module: LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow ) { WNDCLASSEX wcex; 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(wcex.hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // Store instance handle in our global variable hInst = hInstance; // The parameters to CreateWindowEx explained: // WS_EX_OVERLAPPEDWINDOW : An optional extended window style. // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, length) // NULL: the parent of this window // NULL: this application does not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindow failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindow // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // Main message loop: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T("Hello, Windows desktop!"); switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, Windows desktop!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application-specific layout section. EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }
V nabídce Sestavení zvolte Sestavit řešení. Výsledky kompilace se zobrazí v okně Výstup v sadě Visual Studio.
Animace ukazuje kliknutí na tlačítko Uložit vše a potom v hlavní nabídce zvolte Sestavit > Sestavit řešení.
Aplikaci spustíte stisknutím klávesy F5. Mělo by se zobrazit okno s textem "Hello, Windows desktop!".
Gratulujeme! Vytvořili jste tradiční desktopovou aplikaci pro Windows.