Formatierte Ausgabe in win32

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Formatierte Ausgabe in win32

    Ich möchte in meinem Programm erst eine Tabelle Zeichnen die ich mit cout ausgebe.
    Anschließend möchte ich etwas eingeben und zwar in die Tabelle!
    \r oder \b komm ich nicht in die Tabelle rein!
    Gibt es irgendeinen Befehl mit dem ich wieder in den Text springe und
    dort mein cin objekt eingebe?

    Bsp:

    Hallo du!
    Wie heisst du den: 1
    Ich bin der Uwe.

    Das Programm soll also erst alles Ausgeben bis zum "Ich bin Uwe"
    und dann soll man seinen Namen bei 1 eingeben.

    Wer kann mir den Quellcode zeigen?
    Danke im Voraus

    mfg
    Schreiben Sie schön ordentlich, Sie da!
    Denn ich komme bald wieder!
  • Hallo,
    wenn du erst ne Tabelle zeichnen möchtest und erst anschliessend etwas in die Tabelle schreiben
    möchtest(und das Ganze ohne die Tabelle zu zerstören!) dann solltest du dir was mit WriteConsoleOutput basteln.
    Ich hatte damals mal ne einfache Klasse geschrieben mit der man beliebige Texte in beliebige Rechtecke auf dem Konsolenbildschirm ausgeben konnte.
    Ich schau morgen mal ob ich die noch finde.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Hi,
    bin heute erst dazu gekommen nach der Klasse zu suchen.
    Bin auch fündig geworden :) .
    Das Ganze ist eines meiner "frühen Werke" und sicherlich weit davon entfernt "perfekt" zu sein.
    Funktioniert auch nur mit dem ASCII Zeichensatz....
    Naja,wie dem auch sei.Die Klasse war damals eigentlich nur ne Hilfsklasse in einer Art Konsolenframework.
    rect_out.h

    Quellcode

    1. #ifndef __RECT_OUT_INC_H
    2. #define __RECT_OUT_INC_H
    3. #include <iostream>
    4. #include <sstream>
    5. #include <string>
    6. #include <windows.h>
    7. class rect_out
    8. {
    9. public:
    10. rect_out(size_t x=0,size_t y=0,size_t width=0,size_t heigth=0);
    11. virtual ~rect_out();
    12. void setPosition(size_t x=0,size_t y=0){_x =x;_y=y;}
    13. void setSize(size_t w=0,size_t h=0){_w=w;_h=h;}
    14. rect_out& operator<<(rect_out& (*_f)(rect_out&))
    15. {
    16. return(*_f)(*this);
    17. }
    18. template<typename T> rect_out& operator<<(const T& _t)
    19. {
    20. sstr<<_t;
    21. return *this;
    22. };
    23. void displayRect(){drawRect();}
    24. void delContent();
    25. protected:
    26. virtual void drawRect();
    27. private:
    28. size_t _x,_y,_w,_h;
    29. std::stringstream sstr;
    30. };
    31. inline rect_out& rectdraw(rect_out& re)
    32. {
    33. re.displayRect();
    34. return re;
    35. };
    36. inline rect_out& del(rect_out& re)
    37. {
    38. re.delContent();
    39. return re;
    40. };
    41. #endif
    Alles anzeigen

    rect_out.cpp

    Quellcode

    1. #include "rect_out.h"
    2. rect_out::rect_out(size_t x,size_t y,size_t width,size_t heigth)
    3. {
    4. _x=x;
    5. _y=y;
    6. _w=width;
    7. _h=heigth;
    8. }
    9. rect_out::~rect_out()
    10. {
    11. }
    12. void rect_out::delContent()
    13. {
    14. sstr.flush();
    15. sstr.str("");
    16. }
    17. void rect_out::drawRect()
    18. {
    19. std::string strTemp = sstr.str();
    20. size_t s=0;
    21. size_t index=0;
    22. COORD _co={_x,_y};
    23. size_t bufSize=_w*_h;
    24. WORD color=FOREGROUND_RED|BACKGROUND_BLUE;
    25. PCHAR_INFO buf = new CHAR_INFO[bufSize];
    26. while(s<bufSize)
    27. {
    28. if(index>strTemp.size())
    29. {
    30. buf[s].Char.AsciiChar=' ';
    31. buf[s].Attributes=color;
    32. ++s;
    33. }
    34. else
    35. {
    36. switch(strTemp[index])
    37. {
    38. case '\n':
    39. {
    40. while(s%_w)
    41. {
    42. buf[s].Char.AsciiChar=' ';
    43. buf[s].Attributes=color;
    44. ++s;
    45. }
    46. ++index;
    47. break;
    48. }
    49. case '\t':
    50. {
    51. size_t d = s+4;
    52. for(;s<d;++s)
    53. {
    54. buf[s].Char.AsciiChar=' ';
    55. buf[s].Attributes=color;
    56. }
    57. ++index;
    58. break;
    59. }
    60. case '\b':
    61. {
    62. --s;
    63. ++index;
    64. break;
    65. }
    66. default:
    67. {
    68. buf[s].Char.AsciiChar=strTemp[index];
    69. buf[s].Attributes=color;
    70. ++index;
    71. ++s;
    72. }
    73. }
    74. }
    75. }
    76. HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    77. COORD temp={_w,_h};
    78. COORD temp2={0,0};
    79. SMALL_RECT sr;
    80. sr.Top=_y;
    81. sr.Left=_x;
    82. sr.Bottom=_y + _h;
    83. sr.Right= _x + _w;
    84. WriteConsoleOutput(hOut,buf,temp,temp2,&sr);
    85. delete []buf;
    86. };
    Alles anzeigen

    testmain.cpp

    Quellcode

    1. #include <iostream>
    2. #include "rect_out.h"
    3. int main()
    4. {
    5. std::cout<<"********************"<<std::endl;
    6. std::cout<<"* *"<<std::endl;
    7. std::cout<<"* *"<<std::endl;
    8. std::cout<<"********************"<<std::endl;
    9. Sleep(2000);
    10. rect_out out(1,1,18,2);
    11. std::string str("Das ist ein \nTest");
    12. out<<str<<rectdraw;
    13. str= " Und was laengeres das nicht in eine Zeile passt";
    14. Sleep(3000);
    15. out<<del<<str<<rectdraw;
    16. return 0;
    17. }
    Alles anzeigen

    Aus heutiger Sicht würde ich sicherlich vieles anders (besser) machen aber der Aufwand würde jetzt sicherlich zu weit führen(zumal ich den Kram ja selber nicht brauche :lol: :wink: ).
    Schau es dir halt mal an.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)