Advanced   Java   Services FLTK und Visualstudio Back Next Up Home


Ein eigenes Projekt erstellen (Compiler- und Linkereinstellungen)

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

Damit sind die Projekteinstellungen beendet und wir können uns jetzt dem Programm zuwenden.


Ein FLTK-Programm erstellen

Von dem von Visualstudio erzeugten Dateien und Code brauchen wir so gut wie nichts! Zunächst löschen wir alle Dateien mit Ausnahme der eigentlichen cpp-Datei, die in unserem Fall projekt-01.cpp heißt. Das Verzeichnis Resourcendateien löschen wir komplett, das Headerverzeichnis kann man stehen lassen.

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

Den Code der verbleibenden Datei brauchen wir auch nicht. Er wird komplett gelöscht und durch ein elementares FLTK-Programm ersetzt.

projekt-01.jpg

Unser erstes FLTK-Programm besteht nur aus sechs Zeilen...

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg

...und erzeugt ein Fenster fester Größe, das man auf die Taskleiste legen kann und wieder schließen kann.

projekt-01.jpg


Zwei kleine Beispielprogramme mit mehreren Fenstern und Buttons

projekt-01.jpg

projekt-01.jpg

projekt-01.jpg


Kleine Analyse der Projekteinstellungen

Compilereinstellungen
c/c++ -> allgemein -> zusätzliche includeverzeichnisse

   hier müssen die pfade zu den include-verzeichnissen von FLTK eingegeben werden

c/c++ -> präprozessor -> präprozessordefinitionen

   wert: WIN32;NDEBUG;_WINDOWS

   der eintrag _WINDOWS kann weggelassen werden

c/c++ -> Vorkompilierte Header -> Vorkompilierte Header erstellen

   wert: Vorkompilierte Header nicht verwenden


Linkereinstellungen
linker -> allgemein -> ausgabedatei  (optionale einstellung)

   wert: hier kann man den defaultnamen der exe-datei ändern

   z.b. auf "C:\fltk\projects\widgets\button-choice\Release\button-choice.exe"


linker -> eingabe -> zusätzliche abhängigkeiten

   wert: C:\fltk\1.1.9\lib\fltkd.lib  wsock32.lib  comctl32.lib

   hier muß auf die bibliothek fltkd.lib verwiesen werden
   und auf die beiden weiteren windowsbibliotheken
   diese angabe kann man alternativ auch unter befahlszeile machen


linker -> system -> subsystem

   wert: Windows (/SUBSYSTEM:WINDOWS)
   oder: Konsole (/SUBSYSTEM:CONSOLE)

   solange man mit main() arbeitet sind beide einstellungen möglich
   falls man
   int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
   verwendet braucht man natürlich (/SUBSYSTEM:WINDOWS)


linker -> befehlszeile

   falls man die biböiotheken bereits unter linker -> eingabe -> zusätzliche abhängigkeiten
   angegeben hat ist hier kein eintrag mehr notwendig, ansonsten:

   wert: C:\fltk\1.1.9\lib\fltkd.lib  wsock32.lib  comctl32.lib


falls man mit winmain arbeitet:

es erscheint das folgende warning

   Standardbibliothek "MSVCRTD" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.

   dieses warning kann folgendermaßen beseitigt werden, unter

   linker -> befehlszeile

   den folgenden eintrag machen:

   /NODEFAULTLIB:MSVCRTD

   (man kann das warning aber auch ignorieren...)


Erscheinen der Konsole verhindern

Nimmt man die klassische main()-Funktion als Startpunkt einer FLTK-Anwendung, so wird immer ein Konsolfenster erzeugt und zusätzlich ein graphisches Fenster über FLTK. Das läßt sich nicht verhindern, denn main() ist für Konsolanwendungen zuständig. Für die Entwicklung einer Anwendung ist das Konsolfenster zur Fehlersuche und Kontrolle des Programmablaufs unerläßlich. Für eine "fertige" Anwendung dagegen wirkt ein Konsolfenster eher unprofessionell.

Bei der Analyse der Projekteinstellungen wurde bereits die Funktion WinMain() erwähnt. Sie ist der Startpunkt für Windowsanwendungen, die die plattformabhängigen Windowserweiterungen von C++ verwenden um eine graphische Oberfläche zu erhalten. Man kann diese Funktion aber auch an Stelle von main() verwenden um eine FLTK-Anwendung zu starten. In diesem Fall erzeugt Visualstudio kein Konsolfenster.Das folgende kleine Programm zeigt wie man WinMain() mit FLTK verwendet.


#include <windows.h>
#include <Fl.H>
#include <Fl_Window.H>


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
   Fl_Window window(600,450);
   window.resizable(window);

   window.show();
   return Fl::run();
}

In diesem Fall braucht man (natürlich) die Headerdatei "windows.h".


Die Verwendung von WinMain über #define steuern

Es wäre sehr praktisch, wenn man über eine Art Schalter die Verwendung von WinMain steuern könnte. Dieses kleine Problem kann eine Headerdatei lösen. Man kann dann durch Aus- oder Einkommentieren einer einzigen Zeile steuern, on man eine Konsole haben will oder nicht. Hier eine Headerdatei und eine cpp-Datei, die das Gewünschte leisten.

Die Headerdatei


#ifndef _SWITCH_H_
#define _SWITCH_H_

#ifndef __WIN__

#define main() int main(int argc, char **argv)

#else

#include <windows.h>

#define main() int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

#endif // __WIN__

#endif // _SWITCH_H_

Und die cpp-datei


//#define __WIN__  // muss an erster stelle stehen
// durch ein- und auskommentieren steuert man, welche mainfunktion verwendet wird

#include "switch.h"
#include <Fl.H>
#include <Fl_Window.H>

main()
{
   Fl_Window window(600,450);
   window.resizable(window);

   window.show();
   return Fl::run();
}

top Back Next Up Home