Möchtest du, dass deine Programmdatei ihren eigenen Namen feststellen kann?
Wenn deine main-Funktion folgende Signatur hat:
int main(int argc, const char* argv[])
enthält argv[0] den Namen der .exe-Datei.
Unter Windows geht es mit GetModuleFileName().
Bitte bei Gelegenheit auch mal hier nachlesen.
Damit die nach mir auch noch was davon haben:
Icon erstellen mit entsprechendem Tool (zB AhaView),
typischerweise 48px x 48px, 32x32 oder 16x16.
Für transparente Icons liest man ein gif ein.
Jetzt eine Textdatei erstellen mit dem Inhalt: IDI_ICON ICON DISCARDABLE "name.ico"
Abspeichern als ressource.rc, im selben Ordner wo die Source Dateien und das Icon liegen.
In Visual 2005 die Datei in den Ordner Ressourcendateien hinzufügen,
und ganz normal kompilieren.
In der Ressourcenansicht steht zwar, dass das Bearbeiten von Ressourcen mit dem Visual 2005 Express Edition nicht möglich ist, aber eingebunden wird das Icon trotzdem.
Fertisch
Normal ist sie ja weiß
=>Grau
Nutze dafür einfach die improved Console, Link müsste entweder "wichtig" oder bei den FAQ sein...
Die drei Dateien runterladen (oder warens 4? 2?) entsprechend der Anleitung entpacken, ins Projekt einbinden (Welchen Compiler/IDE hast du?) und dann:
#include <iostream>
#include "ic.hpp"
using namespace ic;
using namespace ic::shorties;
using namespace std;
int main ()
{
textcolor(FG_RED); //FG_GREEN, FG_...; siehe ic.hpp für Liste!
cout << "Hello World" << endl;
return 0;
}
Damit kannst du auch in den Vollbildmodus gehen, die Hintergrundfarbe ändern...
Bl@ckSp@rk schrieb:
@Gast
So schlau war ich auch schon bei Google zu suchen aber ich hab dort sehr unterscheidliche Sachen gefunden die aber auch alle irgendwie unvollständig waren und bei mir nicht funktioniert haben.
Google "dll aufruf c++", zweiter Link.
Dauer der Suche: keine 60 Sekunden.
Wo ist das Problem?
Du verwendest 1-Byte-char-Zeichen, du musst aber (je nach Compilereinstellung) 2-Byte-wide-char-Zeichen verwenden (Unicode). In deinem Fall sind nun die 2 Byte-Zeichen aktiviert.
Damit der Compiler auch jeweils das Richtige Zeichenformat verwendet, ist es am Besten TCHAR zu verwenden:
static const TCHAR* myTitle = TEXT("XXXXX");
SetConsoleTitle(myTitle);
MfG SideWinder
Sorry, ich hätte vielleicht noch auf die möglichen Konflikte mit den Namespaces hinweisen sollen. Aber bei dem Beispiel ist das ja kein Problem.
@Dienes: Alternativ kannst du das using namespace ganz weglassen, und vor jedem Bezeichner einfach ic:: etc. setzen.
Der Link geht nicht, auch nicht wenn man sich durch die Registrierung gequält hat.
Unter Windows XP muss man doch sowieso einen Kernel-Mode Treiber schreiben um auf die Ports zugreifen zu können, oder?
Oder man hat eine dll die das für einen macht, zB die port.dll von Herrn Kainka und Berndt, siehe http://www.b-kainka.de/schnitt.htm
Auf der Seite gibt es sie auch (irgendwo) zum runterladen. Einfach mal googeln.
Das Problem mit der DLL: Sie kann keine Interrupts an mein C-Programm weitergeben.
Bei strings geht's auch, sieht nur etwas komplizierter aus:
typedef basic_string<unsigned char> ustring;
(Achtung: für die Zusammenarbeit zwischen diesen ustring und den normalen IO-Streams mußt du selber sorgen)
#include <iostream>
#include <string>
using namespace std;
bool janeinfrage(){
string s;
cin >> s;
if (s=="ja") return true;
if (s=="nein") return false;
return janeinfrage();
}
int main()
{
string name;
string feeling;
cout << "<DaMa>: Herzlich Willkommen bei dem Chatprogramm DaMa" << endl;
cout << "<DaMa>: Wenn Sie dazu aufgefordert werden etwas einzugeben," << endl; // Begrüßung
cout << "<DaMa>: tippen Sie genau ein Wort ein und druecken 'enter'" << endl;
cin >> name;
cout << "<Mario>: Hallo, " << name << ", darf ich du sagen?" <<endl;
cout << "<" << name << "<:";
cout << "<DaMa>: Mit <ja> oder <nein> antworten " << endl;
if(janeinfrage()){
cout << "<Mario>: Oh, danke sehr. Wie gehts denn so?" << endl;
cout << "<" << name << "<:";
cin >> feeling;
cout << "<Mario>: Aha. Mir geht es gut. Oh tut mir Leid. ich muss auch schon wieder." << endl;
cout << "<DaMa>: Ihr Gespraechspartner hat das Programm verlassen." << endl;
cout << "<DaMa>: Beliebige Taste zum beenden druecken." << endl;
char c;
cin.get(c);
}else{
cout << "<Mario>: Naja, wir kennen uns ja auch erst ein paar Minuten..." << endl;
cout << "<Mario>: Wie geht es Ihnen?" << endl;
cout << "<" << name << "<:";
cin >> feeling;
cout << "<Mario>: Wenn Sie mich entschuldigen wuerden. Ich muss schon wieder. Termine..." << endl;
cout << "<DaMa>: Ihr Gespraechspartner hat das Programm verlassen." << endl;
cout << "<DaMa>: Beliebige Taste zum beenden druecken." << endl;
char c;
cin.get(c);
}
return 0;
}
Du machst dir aber Gedanken Für die meisten Konstellationen reicht die std-Lösung vollkommen aus. Und über Möglichkeiten zur Optimierung solltest du erst dann nachdenken, wenn du feststellst, daß genau diese Stelle der Flaschenhals des Programms ist (alles andere ist nur Verschwendung deiner Arbeitszeit).
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
Du mußt nur das Endstück der Ausgabezeile übermalen, wenn sie (bei Backspace oder Entf) verkürzt worden ist.
Ich hab nun versucht ohne clearLineAt() zu arbeiten, bei Backspace & Enf müsste auf der Ausgabe das letzte Zeichen gelöscht werden, also hab ich an der Stelle ein cout.put(' ') eingesetzt, doch hier wird wieder input von der aktuellen position ausgegeben, ahhhhhhhhhh
Bei Leerzeichen funktioniert die Ausgabe, nur wenn ich nach links gehe und dann in input ein wort verschieben will wird beim ersten leerzeichen der erste buchstabe vom nächsten wort gelöscht.
case LEERTASTE: //Leertaste
//clearLineAt( prompt );
cout.put(' ');
input.insert(textpos, " ");
//cout << input << flush;
Vielleicht liegt der fehler bei der ausgabe von input, in allen operationen wird input ausgegeben, deshalb überschreibt sich der string immer wieder, der input string ist aber immer richtig nur die Ausgabe ist falsch.
Hoffe du kannst mir bitte weiterhelfen
Hallo,
wie kann ich im normalen DOS unter C erkennen, ob eine Datei die geladen werden soll, nicht korrekt geschlossen wurde vorher. Also das Programm soll diese Datei entweder nachträglich schließen (geht sowas überhaupt? ...die Datei ist definiert immer gleich groß, es werden nur Werte in der Datei geändert), oder dann löschen und neu anlegen.
Das ganze Problem entsteht nur deshalb, weil dies ein embedded-PC ist, dem auch mal unverhofft der Strom abgeschaltet werden kann.
Danke für Hilfe.
Fussel schrieb:
tut mir leid aber iwiw checke ich punkt 3 von dieser englischen sdk anleitung net
was muss man da genau mit den phaden machen um zB windows.h einbauenzu können?
Im Menü von VC++ EE musst du unter "Extras->Optionen->Projekte und Projektmappen->VC++-Verzeichnisse" die Pfade die auf der Seite angegeben sind, einfügen.