Používáním tohoto webu souhlasíte s použitím souborů cookie. Kliknutím zavřít.
WinForms aplikace ve Visual C++
20.2.2017
Pokud chcete pro vývoj aplikace použít technologii WinForms (.NET Framework) a psát v jazyce C++, tak v aktuálně (v době psaní tohoto článku)
nejnovější verzi Microsoft Visual Studia 2015 se při zakládání nového projektu typu „Visual C++ -> CLR“ již nenabízí možnost přímo vytvořit WinForms aplikaci.
Je tedy nutné si projekt vytvořit a nakonfigurovat „ručně“. Dobrou zprávou je že po vytvoření projektu nám Visual Studio
stále nabízí podporu pro vizuální vývoj WinForms aplikace napsané v C++. Ostatně možnost vytvořit CLR aplikaci v C++ zůstala zachována pro projekt typu „Class library“,
jejíž vývoj je pokud jde o použití vizuálních nástrojů v principu stejný jako u exe aplikace.
Takže jak na to?
- Založíme nový projekt typu Visual C++ -> CLR -> Empty Project.
- Nejprve pomocí volby „Project → Add New Item → UI – Windows Form“ přidáme do projektu hlavní okno aplikace, zapouzdřené třídou odvozenou od Form – nazveme ji např. FormHlavni. Po tomto se nám pravděpodobně objeví chybová hláška ve smyslu že nelze otevřít vizuální návrhář. Po „rebuildu“ projektu a kliknutí na soubor FormHlavni.h v Solution Exploreru by se již měl otevřít vizuální návrhář našeho „formuláře“.
- Dále je potřeba vytvořit vstupní bod procesu, tj, vytvořit ve zdrojovém kódu funkci „main“, bude vypadat třeba takto:
[STAThread]
int main(array<System::String^> ^/*args*/)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
WinFormsCpp::FormHlavni f;
Application::Run(%f);
return 0;
}
Tento kód můžeme umístit přímo do zdrojového souboru FromHlavni.cpp nebo lépe do samostatného souboru main.cpp.
- Přidáme si podporu pro tzv. "předkompilované hlavičky": do projektu přidáme soubory stdafx.cpp a stdafx.h. Do souboru "stdafx.h" vložíme jediný řádek:
#include "stdafx.h"
a soubor stdafx.h může vypadat takto:
#pragma once
using namespace System;
using namespace System::Security::Permissions;
using namespace System::Reflection;
using namespace System::Windows::Forms;
- Když máme připravené soubory pro předkompilované hlavičky, otevřeme nastavení projektu Project -> Properties -> C/C++ -> Precompiled Headers a vpravo v poli "Precompiled Header" zvolíme "Use (/Yu)". Ověříme si že v poli "Precompiled Header File" je uveden soubor stdafx.h, pokud ne, zapíšeme ho tam. Dále musíme vybrat vlastnosti souboru stdafx.cpp, kde u výše uvedené volby "Precompiled Header" zvolíme "Create (/Yc)".
- Soubor stdafx.h musíme také vložit (#include) na začátek zdrojového souboru FormHlavni.cpp (a do všech případných následně vytvořených zdrojových souborů).
- Dále musíme nastavit tzv. vstupní bod aplikace na výše uvedenou funkci main. To provedeme v nastavení vlastností projektu, tj. volbo z menu: Project -> Properties (nahoře vybereme že chceme nastavovat pro všechny konfigurace a všechny cílové platformy) -> Linker -> Advanced -> do pole "Entry Point" napíšeme "main" (tj. název vstupní funkce - samozřejmě zde bez uvozovek).
- Musíme také nastavit tzv. "subsystém", konkrétně to že se nejedná o konzolovou aplikaci (tento typ projektu je nastaven při výše uvedené volbě "CLR Empty project". Toto změníme opět v nastavení linkeru (viz. předchozí bod) kde vybereme volbu "Systém" a vpravo v poli "SubSystem" vybereme variantu "Windows (/SUBSYSTEM:WINDOWS)
Tím by mělo být vše hotovo a po "rebuildu" projektu by se po spuštění měl zobrazit hlavní "formulář" stejně jako u WinForms aplikace vytvořené v jazyce C# nebo Visual basic.
Zde si můžete stáhnout ukázkový projekt pro MS Visual Studio 2015: winforms-cpp-25-2-2016.zip