BIlder in Konsole includen klappt 50 %
-
Hey,
also ich habe folgenden COde gefunden der es möglich macht Bilder in ne Konsole zu packen :
# // put a bitmap image on a Windows Console display # // BCX basic original by Joe Caverly and Kevin Diggins # // BCX generated C code modified for PellesC/Dev-C++ # # #include <stdio.h> # #include <string.h> # #include <windows.h> // Win32Api Header File # # static HWND hConWnd; # # HWND BCX_Bitmap(char*,HWND=0,int=0,int=0,int=0,int=0,int=0,int=0,int=0,int=0); # HWND GetConsoleWndHandle(void); # # # int main() # { # hConWnd = GetConsoleWndHandle(); # if (hConWnd) # { # // select a bitmap file you have or use one of the files in the Windows folder # // filename, handle, ID, ulcX, ulcY, width, height 0,0 auto-adjusts # BCX_Bitmap("C:\\Windows\\greenstone.bmp",hConWnd,123,1,1,0,0); # # getchar(); // wait # } # return 0; # } # # # // draw the bitmap # HWND BCX_Bitmap(char* Text,HWND hWnd,int id,int X,int Y,int W,int H,int Res,int Style,int Exstyle) # { # HWND A; # HBITMAP hBitmap; # # // set default style # if (!Style) Style = WS_CLIPSIBLINGS|WS_CHILD|WS_VISIBLE|SS_BITMAP|WS_TABSTOP; # # // form for the image # A = CreateWindowEx(Exstyle,"static",NULL,Style,X,Y,0,0,hWnd,(HMENU)id,GetModuleHandle(0),NULL); # # // Text contains filename # hBitmap=(HBITMAP)LoadImage(0,Text,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); # # // auto-adjust width and height # if (W || H) hBitmap = (HBITMAP)CopyImage(hBitmap,IMAGE_BITMAP,W,H,LR_COPYRETURNORG); # SendMessage(A,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hBitmap); # if (W || H) SetWindowPos(A,HWND_TOP,X,Y,W,H,SWP_DRAWFRAME); # return A; # } # # # // tricking Windows just a little ... # HWND GetConsoleWndHandle(void) # { # HWND hConWnd; # OSVERSIONINFO os; # char szTempTitle[64], szClassName[128], szOriginalTitle[1024]; # # os.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); # GetVersionEx( &os ); # // may not work on WIN9x # if ( os.dwPlatformId == VER_PLATFORM_WIN32s ) return 0; # # GetConsoleTitle( szOriginalTitle, sizeof ( szOriginalTitle ) ); # sprintf( szTempTitle,"%u - %u", GetTickCount(), GetCurrentProcessId() ); # SetConsoleTitle( szTempTitle ); # Sleep( 40 ); # // handle for NT and XP # hConWnd = FindWindow( NULL, szTempTitle ); # SetConsoleTitle( szOriginalTitle ); # # // may not work on WIN9x # if ( os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) # { # hConWnd = GetWindow( hConWnd, GW_CHILD ); # if ( hConWnd == NULL ) return 0; # GetClassName( hConWnd, szClassName, sizeof ( szClassName ) ); # // while ( _stricmp( szClassName, "ttyGrab" ) != 0 ) # while ( strcmp( szClassName, "ttyGrab" ) != 0 ) # { # hConWnd = GetNextWindow( hConWnd, GW_HWNDNEXT ); # if ( hConWnd == NULL ) return 0; # GetClassName( hConWnd, szClassName, sizeof( szClassName ) ); # } # } # return hConWnd; # }Und es klappt auch wunderbar !! nur wenn man die konsole mit dem Bild offen hat und man bewegt das fenster ein wenig hin und her oder klickt ins schwarze große feld , Hängt sich die Komplette konsole auf ..könnt ihr mir helfen..will so gerne Bilder Includen
... hoffe ihr habt eine Idee bzw besseren VOrschlag
-
Besorg dir ne Grafikbibliothek
-
Er wird wohl nicht umsonst versuchen, ein Bild in der Konsole anzuzeigen.
Wozu ne lib für so ne Kleinigkeit? Reicht doch die raw WinAPI.MfG
-
Erstell eine Windows-Anwendung. Bilder in der Console sind *nicht* supported!
-
Mh.. also Win Andwendung ist schlecht weil ich ein Konsolen Game Progg und dann geht das alles net mehr .. und eine Grafik Lib werd ich ma schaun ob ich was finde, haste nen Tipp für mich ?
-
Du programmierst ein Konsolenspiel und willst Grafiken darstellen???
-
Hallo !
Toa schrieb:
Mh.. also Win Andwendung ist schlecht weil ich ein Konsolen Game Progg und dann geht das alles net mehr .. und eine Grafik Lib werd ich ma schaun ob ich was finde, haste nen Tipp für mich ?
Bibliotheken für Konsolengrafiken kenne ich nicht, aber
man kann Bilder auch in der Konsole anzeigen.
Guck dir doch mal das hier an:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-162280-and-highlight-is-bitmap.htmlGruß, p.
-
Dies funktioniert nur, weil der DC der Comsolen Anwendung direkt manipuliert wird.
Warum willst Du das? Erzeuge eine Windows Applikation und Du brauchst keine Tricks dazu.
-
Martin Richter schrieb:
Dies funktioniert nur, weil der DC der Comsolen Anwendung direkt manipuliert wird.
Warum willst Du das? Erzeuge eine Windows Applikation und Du brauchst keine Tricks dazu.Das ist aber ein gaaaaaaaanz ein toller Trick, sich ein DC über das HWND zu holen !
Booooooooooaaaaaaaah eeeeeeeeyyyyyyyyy !Das ist ein so ganz ein doller Trick, wie bei der Windowsapplikation, da holt man sich auch ein DC

MfG
Der Trickreichep.s.
Comsolen -> Consolen
-
es gibt ein undokumentieres flag für CreateConsoleScreenBuffer mit dem man bilder in der konsole darstellen kann.
-
Wenn ich ne WIn Andwenung machen funktioniert dann mein Quellcode den ich für die Konsole geschrieben hab genauso ? was für ein FLag xD ? .. Kann man den Quellcode oben nicht so bearbeiten das er nicht abschmiert wenn man das fenster herumzieht oder größer macht ?
-
Ein ganz toller Trick ! schrieb:
Martin Richter schrieb:
Dies funktioniert nur, weil der DC der Comsolen Anwendung direkt manipuliert wird.
Warum willst Du das? Erzeuge eine Windows Applikation und Du brauchst keine Tricks dazu.Das ist aber ein gaaaaaaaanz ein toller Trick, sich ein DC über das HWND zu holen !
Booooooooooaaaaaaaah eeeeeeeeyyyyyyyyy !Das ist ein so ganz ein doller Trick, wie bei der Windowsapplikation, da holt man sich auch ein DC

MfG
Der Trickreichep.s.
Comsolen -> Consolen
Es ist ein böser Hack, z.B. schonmal deswegen weil dir keiner garantiert dass die Konsole ein Fenster einer Klasse namens "ttyGrab" hat. Dein zynisches Kommentar ändert daran nichts.
-
Vor allem garantiert ihm keiner, dass eine consolen Anwendung überhaupt ein Fenster hat!

Und wenn kein Fenster dann scon gar keine DC!
-
Kann man mit der SDL Lib Bilder in Konsole rein bekommen ? Wie siehts aus wenn ich ne Win anwendung mache und einfach meinen Normalen Quellcode behalten kennt er ihn dann trotzdem ?
-
Warum muss es denn einen Konsolen Anwendung sein?
-
Toa schrieb:
Kann man mit der SDL Lib Bilder in Konsole rein bekommen ? Wie siehts aus wenn ich ne Win anwendung mache und einfach meinen Normalen Quellcode behalten kennt er ihn dann trotzdem ?
SDL zeigt dir Bilder nicht in der Konsole an. SDL erzeugt dir Fenster, also richtige Windows-Fenster, in denen du deine Grafiken, Bilder, etc. anzeigen lassen kannst. Davon bekommst du bloss nichts mit, weil es in Bibliothekfunktionen eingebettet ist.
Das ganze kannst du von einer Konsolenanwendung aus starten, das ist richtig.Was verstehst du unter deinem normalen Quellcode, meinst du das Beispiel, mit dem du den Thread eröffnet hast ?
Das ist eine Mischung zwischen einem Windowsprogramm und einem Konsolenprogramm.
Vom Konsolenprogramm aus ( main ) wird die CreateWindowsEx-Funktion aufgerufen, die ein Fenster erzeugt. Allerdings fehlt da noch die Fensterprozedur und die Nachrichtenschleife, unerlässlich für ein funktionierendes Windowsprogramm.
Und gucke mal in Zeile 93. Das Windowshandle verschwindet im Nirvana, das nimmt keine Funktion entgegen, wird nirgends gespeichert. Das Betriebssystem weiss gar nicht, an wen es die Nachrichten schicken soll ( Mausklicks, Änderungen der Fenstergrösse, usw. )Edit:
Und wenn du nun unbedingt ein Bild in der Konsole ausgeben möchtest, kannst du ja immernoch das Beispiel aus diesem Forum benutzen.
-
Also mit normalen QUelltext meine ich einfach den QUelltext den normale Console Applications lesen. Kannst du mir zufällig den obrigen Quelltext ändern sodass die Konsole nicht mehr abschmiert
hab nicht so viel Ahung von WInAnwendungen.
Also wenns nicht zuviel Arbeit ist wäre es echt super brauch das unbediengt.
-
Ich könnte dir etwas zusammenklicken, das du von einem Konsolenprogramm aus starten kannst und das dir ein Windowsfenster mit einem Bild laden kann.
Aber auf Dauer wirst du damit wohl kaum glücklich werden, denn es kann dann wirklich nur ein Bild anzeigen.
Vielleicht lohnt es dann doch für dich, auf längere Sicht gesehen, wenn du dich mit einer Grafikbibliothek wie z.B. SDL anfreundest ?
-
ALso das hab ich sowieso vor . ... aber so als Momentan Lösung wäre das echt nett wenn du sowas schreiben könntest für mich . Das Prob ist das ich die Bilder für Folgendes brauche. Ich schreibe momentan ein Consolen Basierendes Game und der KampfModus soll so wie der von Pokemon aussehen heißt : Links oben das Monster rechts unten der CHarakter und dann kann man in einem menü unter dem Char attacken und sowas auswählen , deswegen wäre der erste Quellcode von mir auch perfect nur leider schmiert die Konsole ab wenn man sie bewegt oder größer zieht
*wein*
-
Nu heul ma nicht gleich

Bitte sehr:
#include <windows.h> #include <stdio.h> char* pcBmp = "C:\\Pics\\abc.bmp"; int Run(); HBITMAP LoadBitmapOnce(); LRESULT CALLBACK WindProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); int main() { HWND hwnd; char szTitle[] = "Bitmap View starter"; SetConsoleTitle(szTitle); hwnd = FindWindow( "ConsoleWindowClass", szTitle); Run(); PostMessage( hwnd, WM_CLOSE,0, 0); return 0; } int Run() { WNDCLASSEX WndCls; char szAppName[] = "Bitmap View"; MSG Msg; WndCls.cbSize = sizeof(WndCls); WndCls.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW; WndCls.lpfnWndProc = WindProcedure; WndCls.cbClsExtra = 0; WndCls.cbWndExtra = 0; WndCls.hInstance = NULL; WndCls.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndCls.hCursor = LoadCursor(NULL, IDC_ARROW); WndCls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); WndCls.lpszMenuName = NULL; WndCls.lpszClassName = szAppName; WndCls.hIconSm = NULL; RegisterClassEx(&WndCls); CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, szAppName, szAppName, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, NULL); while( GetMessage(&Msg, NULL, 0, 0) ) { TranslateMessage(&Msg); DispatchMessage( &Msg); } return (Msg.wParam); } HBITMAP LoadBitmapOnce() { return (HBITMAP)LoadImage(NULL, pcBmp, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); } LRESULT CALLBACK WindProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { HDC hDC; HDC MemDC; static HBITMAP hbmp; static int iBitmapLoaded = 0; char buf[256]; PAINTSTRUCT Ps; RECT r; if( !iBitmapLoaded ) { hbmp = LoadBitmapOnce(); if ( !hbmp ) { sprintf( buf, "Failed on LoadImage. %s not found.", pcBmp ); MessageBox( NULL, buf, "Picture not found", MB_OK ); ExitProcess(1); } iBitmapLoaded = 1; } if ( !GetWindowRect( hWnd, &r ) ) { MessageBox( NULL, "Failed on GetWindowRect", "Error", MB_OK ); ExitProcess(1); } switch(Msg) { case WM_DESTROY: DeleteObject(hbmp); PostQuitMessage(WM_QUIT); break; case WM_PAINT: hDC = BeginPaint(hWnd, &Ps); if ( !hDC ) { MessageBox( NULL, "Failed on BeginPaint", "Error", MB_OK ); ExitProcess(1); } MemDC = CreateCompatibleDC(hDC); if ( !MemDC ) { MessageBox( NULL, "Picture not found", "Error", MB_OK ); ExitProcess(1); } if ( ! SelectObject(MemDC, hbmp) ) { MessageBox( NULL, "Failed on SelectObject", "Error", MB_OK ); ExitProcess(1); } BitBlt(hDC, 0, 0, r.right, r.bottom, MemDC, 0, 0, SRCCOPY); DeleteDC(MemDC); EndPaint(hWnd, &Ps); break; default: return DefWindowProc(hWnd, Msg, wParam, lParam); } return 0; }
-
COOL danke
... hab mir nämlich jetzt was ausgedacht , über die konsole wird ne win application aufgerufen wo dann imma bild vom CHarakter und Monster drin ist und über die Konsole kann man die attacken und alles ausführen
glaubst du das geht ?