|
You last visited: Today at 22:41
Advertisement
[C++] Win 32 Fenster Projekt + Konsole?
Discussion on [C++] Win 32 Fenster Projekt + Konsole? within the C/C++ forum part of the Coders Den category.
06/21/2012, 22:10
|
#1
|
elite*gold: 0
Join Date: Dec 2010
Posts: 463
Received Thanks: 97
|
[C++] Win 32 Fenster Projekt + Konsole?
Hi leute,
hab mal kurz ne Frage undzwar hab ich mir nen Fenster erstellt (es kann noch garnix) nur jetzt wollte ich mir zur hilfe noch ne Konsole dazu klatschen.
Hab wohl was gefunden (AllocConsole) doch bin zu blöd es anzuwenden xD
Kann mir vllt jemand erklären wie man das macht?
Fals ihr den Source Code braucht siehe Spoiler:
Code:
// STDAFX_H //
#ifndef STDAFX_H
#define STDAFX_H
// Includes //
#include <Windows.h>
#endif //STDAFX_H
// MAIN_CPP //
#include "StdAfx.h"
#include <iostream>
#include <conio.h>
using namespace std;
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
int WINAPI Window( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow );
const char szClassName[] = "MyClassEx";
char szTitle[] = "TankWorld2D";
int iBreite = 800;
int iHoehe = 600;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow ){
WNDCLASSEX WndClassEx;
HWND hWnd;
MSG msg;
WPARAM wParam;
LPARAM lParam;
// Registrierung //
WndClassEx.cbSize = sizeof( WndClassEx );
WndClassEx.style = NULL;
WndClassEx.lpfnWndProc = WndProc;
WndClassEx.cbClsExtra = NULL;
WndClassEx.cbWndExtra = NULL;
WndClassEx.hInstance = hInstance;
WndClassEx.hIcon = LoadIcon( NULL , IDI_APPLICATION);
WndClassEx.hCursor = LoadCursor ( NULL, IDC_ARROW);
WndClassEx.hbrBackground = ( HBRUSH ) ( COLOR_WINDOW + 1 );
WndClassEx.lpszMenuName = NULL;
WndClassEx.lpszClassName = szClassName;
WndClassEx.hIconSm = NULL;
if ( !RegisterClassEx( &WndClassEx ) ){
MessageBox( NULL, "RegisterClass failed", "Error", MB_OK);
return false;
}
// Fenster Erstellen //
hWnd = CreateWindowEx( NULL, szClassName, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, iBreite, iHoehe, NULL, NULL, hInstance, NULL );
if( hWnd == NULL){
MessageBox( NULL, "Create Window failed", "Error", MB_OK);
}
ShowWindow ( hWnd, iCmdShow);
while( GetMessage( &msg, hWnd, NULL, NULL ) > NULL){
TranslateMessage ( &msg );
DispatchMessage ( &msg );
}
return 0;
|
|
|
06/21/2012, 22:42
|
#2
|
elite*gold: 1
Join Date: Feb 2009
Posts: 6,379
Received Thanks: 7,998
|
Code:
#include <io.h>
#include <fcntl.h>
Code:
void SpawnConsole()
{
FILE* hf_out;
FILE* hf_in;
AllocConsole();
HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);
int hCrt = _open_osfhandle((long) handle_out, _O_TEXT)
hf_out = _fdopen(hCrt, "w");
setvbuf(hf_out, NULL, _IONBF, 1);
*stdout = *hf_out;
HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE);
hCrt = _open_osfhandle((long) handle_in, _O_TEXT);
hf_in = _fdopen(hCrt, "r");
setvbuf(hf_in, NULL, _IONBF, 128);
*stdin = *hf_in;
} // ==> SpawnConsole
Fehlen vermutlich noch ein paar Includes, musst du mal selber schauen.
|
|
|
06/21/2012, 23:24
|
#3
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Code:
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
AllocConsole();
std::cout << "Wasd" << 123 << std::endl;
//...
return 0;
}
Gerade getestet, funktioniert einwandfrei.
Ende, gibt es einen besonderen Grund warum man das so nutzen sollte, wie du es gepostet hast? Oder fingert VS da irgendwie rein, so dass die streams nicht von mir umgeleitet werden müssen?
|
|
|
06/22/2012, 07:03
|
#4
|
elite*gold: 0
Join Date: Dec 2010
Posts: 463
Received Thanks: 97
|
Danke an beide jetzt noch ne Frage ist es auch möglich beides gleichzeitig laufen zu lassen denn wenn ich zb. SpawnConsole/oder was Night geschrieben hat oben in meine WinMain packe dan wartet das Fenster bis diese Anwendung für die Konsole vorbei ist.
@Night wenn ich das richtig verstanden habe. Dann wollte ich das damit ich über die Console nochmal Variablen ändern kann.
|
|
|
06/22/2012, 15:10
|
#5
|
elite*gold: 1
Join Date: Feb 2009
Posts: 6,379
Received Thanks: 7,998
|
Quote:
Originally Posted by Nightblizard
Ende, gibt es einen besonderen Grund warum man das so nutzen sollte, wie du es gepostet hast? Oder fingert VS da irgendwie rein, so dass die streams nicht von mir umgeleitet werden müssen?
|
Phew, gute Frage! Ich benutze es so nun schon seit Jahren - weiß das gar nicht mehr so genau. Ich glaub es hatte etwas damit zu tun, dass, wenn man via CreateProcess einen Prozess erstellt und es nicht explizit per Parameter unterbindet, der Child-Prozess die Console des Parents erbt; ergo die Ausgaben in der Console des Parents landen anstatt in der eigenen. Bin mir aber nicht mehr ganz sicher - ist wie gesagt ewig her, dass ich das Ding gebastelt hab ..
Quote:
Danke an beide jetzt noch ne Frage ist es auch möglich beides gleichzeitig laufen zu lassen denn wenn ich zb. SpawnConsole/oder was Night geschrieben hat oben in meine WinMain packe dan wartet das Fenster bis diese Anwendung für die Konsole vorbei ist.
|
Bitte konkretisieren, kann ich so nicht nachvollziehen.
|
|
|
06/22/2012, 15:22
|
#6
|
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
|
Quote:
Originally Posted by Ende!
Code:
#include <io.h>
#include <fcntl.h>
Code:
void SpawnConsole()
{
FILE* hf_out;
FILE* hf_in;
AllocConsole();
HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);
int hCrt = _open_osfhandle((long) handle_out, _O_TEXT)
hf_out = _fdopen(hCrt, "w");
setvbuf(hf_out, NULL, _IONBF, 1);
*stdout = *hf_out;
HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE);
hCrt = _open_osfhandle((long) handle_in, _O_TEXT);
hf_in = _fdopen(hCrt, "r");
setvbuf(hf_in, NULL, _IONBF, 128);
*stdin = *hf_in;
} // ==> SpawnConsole
Fehlen vermutlich noch ein paar Includes, musst du mal selber schauen.
|
Fehlt nicht noch etwas wie damit auch der Rest umgeleitet wird ?
|
|
|
06/22/2012, 16:19
|
#7
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Ich würds einfach in nen seperaten Thread packen, damit das normale Fenster und die Konsole gleichzeitig laufen können.
|
|
|
06/24/2012, 11:21
|
#8
|
elite*gold: 0
Join Date: Mar 2012
Posts: 26
Received Thanks: 3
|
Also wenn du Dev C++ hast brauchst du nur Neu->Projekt->Konsolenanwendung machen. Dann löscht du den Code und schreibst deine WinMain rein und du hast Fenster und Konsole gleichzeitig. Ich weiß aber nicht ob das so einfach bei Visual Studio auch geht.
|
|
|
Similar Threads
|
Neuer Monitor für PC und Konsole, aber bei Konsole kein Sound!
01/08/2012 - Technical Support - 2 Replies
Hey Leute!
Ich habe zum meinem 18. einen neuen Monitor bekommen, den S2330mx von DELL.
Nun ja ich bin ziemlich zufrieden mit dem Bildschirm.
Mein Problem ist halt jetzt, das im Bildschirm keine Lautsprecher eingebaut sind.
Und ein Audio Eingang ist auch keiner. Alles am PC läuft gut, aber Sound bei meiner Playstation 3 ist halt nicht da und ich wollte fragen ob man das irgendwie machen könnte, das ich auch Sound habe, wenn ich Playstation spiele.
Boxen habe ich auch von DELL und die...
|
All times are GMT +2. The time now is 22:41.
|
|