TextBox
-
Hallo alle miteinander,
hätte da mal drei Fragen bezüglich TextBoxen in C++
und zwar:
1: Wie kann ich in einer TextBox die aktuelle Uhrzeit anzeigen lassen hier der erste Versuchif(connect==false){ time_t t=time(0); ctime(&t); Ereignisse->Text=t+" Keine Verbindung zum Interface vorhanden!\r\n"+Ereignisse->Text; }geht aber net, da er nur die Sekunden Anzeigt die seit dem 1.1.1970 vergangen sind
2. Kann ich direkt den Inhalt einer TextBox ausdrucken? Habe mal nach "print dialog c++" gesucht aber nix dazu gefunden

3. Und zum Schluss wie kann man den Inhalt der TextBox in eine *.txt - Datei abspeicher?
(Arbeite mit Visual Studio 2005)
Danke schonmal für die Hilfe^^
-
1. Uhrzeit: http://www.c-plusplus.net/forum/viewtopic-var-t-is-209105.html (z.B. über SetWindowText der Textbox zuweisen)
2. Ich habe mal eine Funktion geschrieben, die ein beliebiges Fenster ausdruckt. Das sollte auch mit einer Textbox klappen. Einfach den HDC übergeben. Du musst die Funktion wohl noch ein wenig anpassen (z.B. defines, die du nicht hast).
//-------------------------------------------------------------------------------------------------------------------------- FCT PrintWindowEx(HWND hWnd,BOOL bCenterWnd) { //-------------------------------------------------------------------------------------------------------------------------- int iWidth,iHeight,iWidthPrn,iHeightPrn; BOOL bBitBltRes=FALSE; RECT rcWnd; POINT pn; HWND hWndForegroundTmp; HCURSOR hOldCursor; PRINTDLG lpPrintDlg; if(!IsWindow(hWnd)) { return ERR_NOWINDOW; } if(hWnd==INVALID_HANDLE_VALUE) { return ERR_INVALIDHANDLE; } GetWindowRect(hWnd,&rcWnd); //Maße des zu druckenden Fensters holen OffsetRect(&rcWnd,-rcWnd.left,-rcWnd.top); iWidth = rcWnd.right - rcWnd.left; iHeight = rcWnd.bottom - rcWnd.top; memset(&lpPrintDlg,0,sizeof(PRINTDLG)); //soll die nicht behandelte Ausnahme in KERNEL32.DLL verhindern (tut es aber nicht!) lpPrintDlg.lStructSize = (DWORD)sizeof(lpPrintDlg); lpPrintDlg.hwndOwner = NULL; lpPrintDlg.hDevMode = NULL;//&lpDevmode; lpPrintDlg.hDevNames = NULL; lpPrintDlg.hDC = NULL; lpPrintDlg.Flags = PD_HIDEPRINTTOFILE|PD_NONETWORKBUTTON|PD_NOPAGENUMS|PD_NOSELECTION|PD_RETURNDC|PD_USEDEVMODECOPIESANDCOLLATE; PrintDlg(&lpPrintDlg); //erzeugt manchmal (!) eine nicht behandelte Ausnahme in KERNEL32.DLL (nicht reproduzierbar) if(lpPrintDlg.hDC==NULL) { //Drucker-DC ungültig; return ERR_INVALIDPRINTER; } if( !(GetDeviceCaps(lpPrintDlg.hDC,RASTERCAPS) & RC_STRETCHBLT) ) { //StretchBlt wird vom Drucker nicht unterstützt return ERR_NOSTRETCHBLT; } DOCINFO di = { sizeof(DOCINFO) }; di.lpszDocName = "modusAOI - Druckauftrag"; iWidthPrn = GetDeviceCaps(lpPrintDlg.hDC,HORZRES); iHeightPrn = GetDeviceCaps(lpPrintDlg.hDC,VERTRES); pn = GetZoomedWidthHeight(iWidthPrn,iHeightPrn,iWidth,iHeight); hOldCursor=SetCursor(NULL); hWndForegroundTmp=GetForegroundWindow(); SetForegroundWindow(hWnd); //ist das letztendlich nötig? oder kann ich mich darauf verlassen, dass das Zielfenster immer oben ist? UpdateWindow(hWnd); HDC hdc = ::GetWindowDC(hWnd); HDC memDC = ::CreateCompatibleDC(hdc); HBITMAP hbm = ::CreateCompatibleBitmap(hdc,pn.x,pn.y); HBITMAP hbmOld = (HBITMAP)::SelectObject(memDC, hbm); if( !StretchBlt(memDC,0,0,pn.x,pn.y,hdc,rcWnd.left,rcWnd.top,iWidth,iHeight,SRCCOPY) ) { //StretchBlt ist fehlgeschlagen, warum auch immer... ::SelectObject(memDC, hbmOld); ::DeleteDC(memDC); ::ReleaseDC(hWnd,hdc); ::DeleteObject(hbm); SetForegroundWindow(hWndForegroundTmp); return ERR_BLTREADFAILED; } SetForegroundWindow(hWndForegroundTmp); SetCursor(hOldCursor); BITMAPINFO bmi; ZeroMemory(&bmi,sizeof(bmi)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = pn.x; bmi.bmiHeader.biHeight = pn.y; bmi.bmiHeader.biBitCount = 24; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biSizeImage = 32 * iWidth * iHeight / 8; BYTE *pbBits = new BYTE[bmi.bmiHeader.biSizeImage]; ::GetDIBits(memDC,hbm,0,bmi.bmiHeader.biHeight,pbBits,&bmi,DIB_RGB_COLORS); BITMAPFILEHEADER bfh; bfh.bfType = ('M' << 8) + 'B'; bfh.bfSize = sizeof(BITMAPFILEHEADER) + bmi.bmiHeader.biSizeImage + sizeof(BITMAPINFOHEADER); bfh.bfReserved1 = 0; bfh.bfReserved2 = 0; bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); SetDIBits(memDC,hbm,0,bmi.bmiHeader.biHeight,pbBits,&bmi,DIB_RGB_COLORS); if(StartDoc(lpPrintDlg.hDC,&di) > 0) { if(StartPage(lpPrintDlg.hDC) > 0) { if(bCenterWnd) { bBitBltRes=BitBlt(lpPrintDlg.hDC, //Bild wird zentriert auf dem Drucker ausgegeben (iWidthPrn-pn.x)/2, //Startposition X (Target) /*0*/(iHeightPrn-pn.y)/2, //Startposition Y (Target) (pn.x)+((iWidthPrn-pn.x)/2), //Breite (Target) /*pn.y*/(pn.y)+((iHeightPrn-pn.y)/2), //Höhe (Target) memDC, 0, //Startposition X (Source) 0, //Startposition Y (Source) SRCCOPY); }else { bBitBltRes=BitBlt(lpPrintDlg.hDC, //Bild wird nicht zentriert (iWidthPrn-pn.x)/2, //Startposition X (Target) 0, //Startposition Y (Target) (pn.x)+((iWidthPrn-pn.x)/2), //Breite (Target) pn.y, //Höhe (Target) memDC, 0, //Startposition X (Source) 0, //Startposition Y (Source) SRCCOPY); } if(!bBitBltRes) { //BitBlt ist fehlgeschlagen ::SelectObject(memDC, hbmOld); ::DeleteDC(memDC); ::ReleaseDC(hWnd,hdc); ::DeleteObject(hbm); delete[] pbBits; return ERR_BLTWRITEFAILED; } if(EndPage(lpPrintDlg.hDC ) > 0) { EndDoc(lpPrintDlg.hDC); }else { ::SelectObject(memDC, hbmOld); ::DeleteDC(memDC); ::ReleaseDC(hWnd,hdc); ::DeleteObject(hbm); delete[] pbBits; return ERR_ENDPAGEFAILED; } }else { ::SelectObject(memDC, hbmOld); ::DeleteDC(memDC); ::ReleaseDC(hWnd,hdc); ::DeleteObject(hbm); delete[] pbBits; return ERR_STARTPAGEFAILED; } }else { ::SelectObject(memDC, hbmOld); ::DeleteDC(memDC); ::ReleaseDC(hWnd,hdc); ::DeleteObject(hbm); delete[] pbBits; return ERR_STARTDOCFAILED; }//if(StartDoc...) // DeleteDC( lpPrintDlg.hDC ); ::SelectObject(memDC, hbmOld); ::DeleteDC(memDC); ::ReleaseDC(hWnd,hdc); ::DeleteObject(hbm); delete[] pbBits; // return 0; }3. Such mal nach fstream.
-
Danke für die Antwort

Das mit der Uhhrzeit hat soweit geklappt.
Aber mit dem drucken will es nicht so richtig...
sieht auch für mich nicht so richtig verständlich aus^^Das Speichern klappt mehr oder weniger...er speichert zwar die text datei ab aber ohne inhalt, weil ich nicht weis wie ich die TextBox einbinden soll
Stream^ myStream; SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog; saveFileDialog1->Filter = "txt files (*.txt)|*.*"; saveFileDialog1->FilterIndex = 2; saveFileDialog1->RestoreDirectory = true; if ( saveFileDialog1->ShowDialog() == ::DialogResult::OK ) { if ( (myStream = saveFileDialog1->OpenFile()) != nullptr ) { myStream->Close(); } }danke schonmal für weitere anregungen^^
-
Hey, du schreibst ja managed code! Da bist du eigentlich im falschen Forum (C++/CLI wäre richtig). Damit kenne ich mich gar nicht aus. In C++ könntest du deine Textbox in etwa so speichern (ungetestet):
fstream myStream; char s[512]; myStream.open("C:\\myTextfile.txt",ios::out); m_myTextbox.GetWindowText(s); myStream << s; myStream.close();