Matrix-Programm / hide coursor



  • Hi miteinander,

    diesmal suche ich nach ner Funktion, die den Coursor verschwinden lassen soll,
    und zwar soll das dos fenster erstmal auf fullscreen gebracht werden,
    das geschieht bereits mit folgendem code

    #include <windows.h>
    
    void FullScreen() 
    { 
        keybd_event(VK_MENU, 0x38, 0, 0); 
        keybd_event(VK_RETURN, 0x1c, 0, 0); 
        keybd_event(VK_RETURN, 0x1c, KEYEVENTF_KEYUP, 0); 
        keybd_event(VK_MENU, 0x38, KEYEVENTF_KEYUP, 0); 
    }
    
    int main()
    {
    	FullScreen();
    	system("cls");
    
    	return 0;
    }
    

    der simuliert den tastendruck ALT+ENTER
    nun muss noch der Coursor verschwinden, der _ der da immer blinkt....

    kennt jemand ne func oder ne routine ???

    DAnke



  • Hehe,
    auf Ideen kommen manche Leute. 😉

    Das kannst du mit SetConsoleCursorInfo beeinflussen.



  • Jo das ganze Wochenende wixen&saufen ist ja auch nicht so gesund,
    da lieber proggen 🙂

    scherz beiseite, mhh danke für den tipp, aber wie genau binde ich die ein ??



  • Ja, du musst da noch etwas Vorarbeit leisten, um die Fnkt. nutzen zu können.
    Aber dafür hast du dann auch wirklich flüssige Konsolengrafik und kannst Sachen machen, die du mit normalen C++ Befehlen nicht hinbekommst.

    Lies dich mal ein:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/character_mode_applications.asp

    Viel Spaß.



  • Danke Danke,
    habe schon was gefunden, und habe es direkt mal eingebaut...
    so sieht mein MATRIX-PROGG bisher aus 🙂

    #include <windows.h>
    #include <stdio.h>
    
    #define _NOCURSOR 0
    #define _SOLIDCURSOR 1
    #define _NORMALCURSOR 2
    
    void _setcursortype(int type)
    {
    	 CONSOLE_CURSOR_INFO Info;
    	 Info.bVisible = TRUE;
    	 if     (type == _NOCURSOR)     Info.dwSize=1, Info.bVisible=FALSE;
    	 else if(type == _SOLIDCURSOR)  Info.dwSize = 100;
    	 else if(type == _NORMALCURSOR) Info.dwSize = 1;
    	 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &Info);
    }
    
    void FullScreen() 
    { 
        keybd_event(VK_MENU, 0x38, 0, 0); 
        keybd_event(VK_RETURN, 0x1c, 0, 0); 
        keybd_event(VK_RETURN, 0x1c, KEYEVENTF_KEYUP, 0); 
        keybd_event(VK_MENU, 0x38, KEYEVENTF_KEYUP, 0); 
    }
    
    void gotoxy(int x,int y)
    {
      COORD cur={x,y};
      SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cur);
    }
    
    int main() 
    { 
    	int a, b, i;
    	a = 0;
    	b = 0;
    	i = 0;
    
    	FullScreen();
    
    	_setcursortype(_NOCURSOR);
    
    	while((a != 9) && (b != 9))
    	{
    		printf("X: ");
    		scanf("%d", &a);
    
    		printf("Y: ");
    		scanf("%d", &b);
    
    		gotoxy(a,b);
    	}
    
    	return 0;
    }
    

    Noch nicht die Welt aber schonmal nicht schlecht ....
    weißt du zufällig auch noch, wie ich einzelne Pixel einschalten kann ??
    das wäre nämöich das nächste, dass per zufall ein pixel angesprungen
    wird und dieser dann auf eins (leuchten in in grün natürlich) gesetzt wird und dann wird
    der nächste pixel per zufall auf grün gesetzt, bis sich langsam der ganze bildschirm gefüllt hat... 🙂
    das mit zufallscoordinaten mache ich mit

    #include <time.h>
    
    int main()
    {
        int d=0;
          srand(time(NULL));
        while((d >= 80))
    {
        d=rand();
    }
    return 0;
    }
    

    naja so ähnlich, das kriege ich schon hin, sollte nur nen beispiel sein....

    müsste ich noch wissen, wie groß der bildschirm ist also max X Coordinate
    und max Y Coordinate
    wie lauten die ?

    THX
    (Hoffe ich nerv net)



  • Die Größe kriegste mit GetConsoleScreenBufferInfo.

    Pixel setzen kannste erstmal vergessen. Dazu müsste du dann schon eine richtige Fensteranwendung schreiben.

    Evtl. ist auch die SDL ein Blick wert.



  • Dieser Thread wurde von Moderator/in cd9000 aus dem Forum WinAPI 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.



  • Alles was du da an Funktionen selbst schreibst bzw. einbindest wäre in der Improved Console (Siehe FAQ oder die neue Version hier: http://www.c-plusplus.net/forum/viewtopic-var-t-is-109963.html) zu finden.

    Pixel einzeln anzusprechen bedarf aber etwas mehr - schließlich hast du ja eine Konsolenanwendung die in der MSDN nicht umsonst "Character-Mode-Applications" genannt werden 🙂

    MfG SideWinder



  • Habe da was in der MSDN gefunden, weiß aber nichts damit anzufangen...

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cdc.3a3a.setpixel.asp

    könnte das eine Lösung bringen ?



  • Das ist MFC das bringt dir in diesem Fall nichts, es gibt allerdings auch eine WinAPI-Funktion SetPixel(). Mit Hilfe der private Improved Console-Methode getCWND() (kopierst du) bekommst du auch das Konsolenfenster in das du gerne zeichnen möchtest.

    Da du aber keinen Zugriff auf die Ereignisschleife hast kannst du bei WM_PAINT-Nachrichten kein Neuzeichnen anordnen, so ist nach dem ersten Repaint alles wieder weg was du gezeichnet hast (und glaub mir, ein solches Repaint kommt sehr oft vor!).

    Fazit: Sinnlos, wenn du unbedingt Pixel setzen willst (Was bei einem Matrix-Bildschirm-Programm eigentlich ja gar nicht nötig ist ;)) musst du eine Grafik-Library für die Konsole benützen (siehe zB Allegro in der Spiele/Grafik-FAQ) oder eine Fensteranwendung schreiben.

    MfG SideWinder


Anmelden zum Antworten