Chat mit 2 Konsolenfenster oder WinAPI



  • Hi Ich bin neu und habe mal eine Frage

    Eigentlich wollte ich einen Chat schreiben leider kriege ich das mit WINAPI noch nicht zum laufen daher wollte ich frage ob es möglich ist 2Consloen fenster auf einmal zu öffnen damit man eine eingabe und eine Ausgabe hat.

    Oder mir kann vieleicht jemand bei winapi helfen oder ein buch empfehlen.

    Mfg. Matyr

    Queltext schicke ich auf interesse



  • Also um die WinAPI zu beherrschen reicht eigentlich die Doku, die mitgelifert ist.

    Allerdings, wenn du nicht so gut Englisch kannst oder lieber ein Buch hast, ist da das zu empfehlen:

    http://www.edv-buchversand.de/mspress-edvbv/product.asp?cnt=product&id=ms-188

    Das mit der Konosle könntest du ebenfalls sicher mit multithreading machen. Der einte Thread macht dir die Ausgabe der andere die Eingabe.



  • Multithreading kann ich aber ich weiß nicht wie ich 2 Konsolen fenster hinbekomme.

    2.Problem: http://www.win-api.de/tutorials.php?tutid=3 das klappt nicht



  • Matyr schrieb:

    Multithreading kann ich aber ich weiß nicht wie ich 2 Konsolen fenster hinbekomme.

    2.Problem: http://www.win-api.de/tutorials.php?tutid=3 das klappt nicht

    Warum willst du dann 2 Konsolenfenster? Ich fände es wesentlich eleganter, wenn man das in einem machen würde..

    Zu deinem 2 Problem.. Was sollen wir dir jetzt antworten?! 🙄



  • weiß nicht aber mit 2 wäre das übersichtlicher als in einem in einem gehts rein anderen raus

    Dass habe ich wo sind da die fehler was kann ich verbessern

    /
    
    #include "stdafx.h"
    #include "Chat fenster.h"
    #include <WinUser.h>
    
    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    				   PSTR szCmdLine, int iCmdShow)
    {
    	MSG       msg;
    	HWND      hWnd;
    	WNDCLASS  wc;
    
    	const char szAppName[] = "Texte einlesen";
    	const char szTitelName[] = "Test";
    	TCHAR Titel[5];
    	LoadString(hInstance,NULL,(LPWSTR)szTitelName,5);
    
    	wc.cbClsExtra          = 0;
    	wc.cbWndExtra          = 0;
    	wc.hbrBackground       = (HBRUSH) GetStockObject(WHITE_BRUSH);
    	wc.hCursor             = LoadCursor(NULL, IDC_ARROW);
    	wc.hIcon               = LoadIcon(NULL, IDI_APPLICATION);
    	wc.hInstance           = hInstance;
    	wc.lpfnWndProc         = WndProc;
    	wc.lpszClassName       = (LPCWSTR)szAppName;
    	wc.lpszMenuName        = NULL;
    	wc.style               = CS_HREDRAW | CS_VREDRAW;
    
    	RegisterClass(&wc);
    
    	hWnd = CreateWindowExW(  
    		WS_EX_APPWINDOW,
    		(LPCWSTR)szAppName,
    		Titel,
    		WS_OVERLAPPEDWINDOW,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		NULL,
    		NULL,
    		hInstance,
    		NULL);
    
    	ShowWindow(hWnd, iCmdShow);
    	UpdateWindow(hWnd);
    
    	while (GetMessage(&msg, NULL, 0, 0))
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    	return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	static RECT     rect;
    	static char     cBuffer[100];
    	static int      iActLen;
    
    	switch (message)
    	{
    	case WM_SIZE:
    		{
    			rect.left   = 20;
    			rect.right  = LOWORD(lParam) - 20;
    			rect.bottom = HIWORD(lParam);
    			return 0;
    		}
    	case WM_CHAR:
    		{
    			switch (wParam)
    			{
    			case '\r':
    				iActLen = 0;
    				InvalidateRect(hWnd, NULL, TRUE);
    				break;
    
    			case '\b':
    				if (iActLen <= 0)
    					break;
    
    				iActLen--;
    				InvalidateRect(hWnd, NULL, TRUE);
    				break;
    
    			case '\t':
    			case '\n':
    			case  27 :
    				break;
    			default:
    				if (iActLen < sizeof(cBuffer))
    				{
    					cBuffer[iActLen++] = wParam;
    					InvalidateRect(hWnd, NULL, FALSE);
    				}
    				break;
    			}
    			return 0;
    		}
    	case WM_PAINT:
    		{
    			PAINTSTRUCT  ps;
    			HDC          hDC;
    
    			hDC = BeginPaint(hWnd, &ps);
    			{
    				DrawTextW(hDC, (LPCWSTR)cBuffer, iActLen, &rect, 
    					DT_SINGLELINE | DT_VCENTER);
    			}
    			EndPaint(hWnd, &ps);
    			return 0;
    		}
    	case WM_KEYDOWN:
    		{
    			if (wParam == VK_ESCAPE)
    			{
    				SendMessage(hWnd, WM_CLOSE, 0, 0);
    			}
    			return 0;
    		}
    	case WM_DESTROY:
    		{
    			PostQuitMessage(0);
    			return 0;
    		}
    	}
    	return DefWindowProc(hWnd, message, wParam, lParam);
    }
    


  • Nein. Kannst es ja selber optisch abtrennen. In anderen Chats ist das ja auch so schön nacheinander..

    Was geht den an dem Code nicht? Macht er nicht das, was du möchtest, oder gibt es einen Compiler Error?



  • Der macht nich das was ich möchte da entsteht wohl ein fenster aber die schrift wird nur in strichen angezeigt
    geschweige denn ausgewertet



  • Geht damit mal ins WinAPI Forum.



  • Also ich habe mal eine runde getestet.
    Man kann ein fenster ja mit AllocConsole erzeugen. betonung eins.
    Soweit ich das verstanden habe kann man aber mithilfe von FreeConsole das auflösen mit AllocConsole eine neue erstellen und mit AttachConsole belieig viele für jeden prozess erstellen leider funktioniert das nicht wirklich der betreffende code sieht so aus:

    int main()
    {
    int test=FreeConsole();
    	AllocConsole();
    
    öffne thread
    
    AttachConsole(thread_id)   
    }
    

    wobei die ID der der 6 Parameter von CreateThread ist.
    Trozdem öffnet der nur ein fenster. Ich weiß nicht woran das liegt.
    Wüsst ihr das.



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



  • Hi Bruder !
    Wozu zwei Konsolen ?
    Teil doch eine Konsole auf in obere Hälfte, untere Hälfte.
    Den Cursor kannst du ja dem entsprechend setzen.
    Aber ansonsten finde ich, solltest du dein Chatprogramm mit richtigen Windowsfenstern machen.
    Es sei denn du möchtest später auf Smileys und sowas verzichten.


Anmelden zum Antworten