WMPAINT, kann den Text nicht positionieren.


  • Mod

    Nein! Das hat nichts damit zu tun.
    Du füllst doch die Variable rt in dem Codeschnippsel... zeig mal was es damit auf sich hat.



  • also das ganze fängt so an:

    case WM_PAINT:
    			RECT rt;
    			hdc = BeginPaint(hWnd, &ps);
    			GetClientRect(hWnd, &rt);
    
    			DrawText(hdc, mOdus, -1, &rt, DT_SINGLELINE | DT_LEFT| DT_VCENTER) ; 
    		//	DrawText(hdc, g_pszTextLabel, _tcslen(g_pszTextLabel), &rt, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
    
    			EndPaint(hWnd, &ps);
    			break;
    

    ich gehe mal davon aus das "GetClientRect" dann rt füllt.
    deswegen die Methode dazu hier:

    RECT rt, rt1;
    	int DlgWidth, DlgHeight;	// dialog width and height in pixel units
    	int NewPosX, NewPosY;
    
    	switch (message)
    	{
    		case WM_INITDIALOG:
    			// trying to center the About dialog
    			if (GetWindowRect(hDlg, &rt1)) {
    				GetClientRect(GetParent(hDlg), &rt);
    				DlgWidth	= rt1.right - rt1.left;
    				DlgHeight	= rt1.bottom - rt1.top ;
    				NewPosX		= (rt.right - rt.left - DlgWidth)/2;
    				NewPosY		= (rt.bottom - rt.top - DlgHeight)/2;
    
    				// if the About box is larger than the physical screen 
    				if (NewPosX < 0) NewPosX = 0;
    				if (NewPosY < 0) NewPosY = 0;
    				SetWindowPos(hDlg, 0, NewPosX, NewPosY,
    					0, 0, SWP_NOZORDER | SWP_NOSIZE);
    			}
    

    deswegen dachte ich das der teil damit was zu tun hat. oder hast du sonst noch ne idee???

    vielen dank !!



  • ich bin echt am verzweifeln. habs immer noch nicht raus. das kann doch nicht so schwer sein 😕

    mir ist es mittlerweile egal wo es hin kommt.
    es können auch beide informationen untereinander stehen. in der mitte. aber mit dem DT_WORDBREAK klappts auch net 😕

    lg susanne


  • Mod

    Dann zeige doch mal bitte ein Stück mehr Code rund um DrawText!

    Ich habe zwar eine Kristalkugel, aber bei so wenig Infos, die Du lieferst bleibt die dunkel... 🕶



  • so endlich auch mal angemeldet 🙂

    also mein code um drawText:

    hoffe das dir das hilft.. sonst schick ich noch mehr.. oder weitere ausschnitte..

    danke dir !!


  • Mod

    Wo ist der Code?



  • oh sorry... hier ist der code:

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	HDC hdc;
    	int wmId, wmEvent;
    	PAINTSTRUCT ps;
    
    	if(scanMode == 1){
    		mOdus = _T("Mode: Normal");
    	}
    
    	if(scanMode == 2){
    		mOdus = _T("Mode: Seller");
    	}
    
    	if(scanMode == 3){
    		mOdus = _T("Mode: Customer");
    	}
    
    	switch (message) 
    	{
    		case WM_COMMAND:
    			wmId    = LOWORD(wParam); 
    			wmEvent = HIWORD(wParam); 
    			// Parse the menu selections:
    			switch (wmId)
    			{
    
    				case IDM_HELP_ABOUT:
    				   DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
    				   break;
    				case IDM_FILE_EXIT:
    				  DestroyWindow(hWnd);
    				   break;
    
    				case IDM_MODE_MODE:
    					scanMode = 1;
    					DelMessage();
    					InvalidateRect(hWnd, NULL, TRUE);
    				   break;
    
    				case IDM_MODE_SELLER:
    					scanMode = 2;
    					DelMessage();
    					InvalidateRect(hWnd, NULL, TRUE);
    				   break;
    
    				case IDM_MODE_CUST:
    					scanMode = 3;
    					DelMessage();
    					InvalidateRect(hWnd, NULL, TRUE);
    				   break;
    
    				default:
    				   return DefWindowProc(hWnd, message, wParam, lParam);
    			}
    			break;
    		case WM_CREATE:
    			g_hwndCB = CommandBar_Create(g_hInst, hWnd, 1);			
    			CommandBar_InsertMenubar(g_hwndCB, g_hInst, IDM_MENU, 0);
    			CommandBar_AddAdornments(g_hwndCB, 0, 0);
    
    			g_oScanner.registerLabelMessage(hWnd, WM_BARCODE_LABEL);
    			g_oScanner.registerStartScanningMessage(hWnd, WM_SCANNER_START);
    			g_oScanner.registerStopScanningMessage(hWnd, WM_SCANNER_STOP);
    			g_oScanner.registerTimeOutMessage(hWnd, WM_SCANNER_TIMEOUT);
    			break;
    
    		case WM_PAINT:
    			RECT rt;
    			hdc = BeginPaint(hWnd, &ps);
    			GetClientRect(hWnd, &rt);
    
    			ID = _T("ID:xfgnxfgnsfnsfgnsgnmsmsfmsmsfmsmsmsfmsfmsmsfmsfmsfm1234 ");
    
    			DrawText(hdc, mOdus, -1, &rt, DT_SINGLELINE | DT_CENTER| DT_VCENTER) ; 
    	//		DrawText(hdc, g_pszTextLabel, _tcslen(g_pszTextLabel), &rt, DT_SINGLELINE | DT_VCENTER | DT_BOTTOM);
    
    			EndPaint(hWnd, &ps);
    			break;
    
    		case WM_BARCODE_LABEL:
    			ThisProgram_UpdateTextLabel();
    			InvalidateRect(hWnd, NULL, TRUE);
    			break;
            case WM_SCANNER_START:
                ThisProgram_UpdateStaus(hWnd, WM_SCANNER_START);
    			break;
            case WM_SCANNER_STOP:
                ThisProgram_UpdateStaus(hWnd, WM_SCANNER_STOP);
    			break;
            case WM_SCANNER_TIMEOUT:
                ThisProgram_UpdateStaus(hWnd, WM_SCANNER_TIMEOUT);
    			break;
    
    		case WM_DESTROY:
    			CommandBar_Destroy(g_hwndCB);
    			PostQuitMessage(0);
    			break;
    		default:
    			return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }
    

  • Mod

    Ja und?

    Verwenden: DT_SINGLELINE | DT_LEFT| DT_TOP



  • susan81 schrieb:

    Hallo, ich habe das Problem den Text im Fenster zu positionieren.

    .
    .
    .
    wenn ich DT_TOP verwende wird gar kein text mehr angezeigt.

    könnt ihr mir helfen ??

    vielen dank

    gruß
    susanne

    das war ja grad mein problem 🙂 .. habe es mit DT_TOP versucht. gleich am anfang. aber dann wird komischweise gar kein text mehr angezeigt. bleibt also komplett leer.
    hast du ne idee ?

    EDIT:

    siet dann so aus:

    DrawText(hdc, mOdus, -1, &rt, DT_SINGLELINE | DT_LEFT| DT_TOP ) ;
    

  • Mod

    Nein! Denn du holst Dir das Cleint Rect und zeichnest in die Linke obere Ecke. Bei mir funktioniert das wie erwartet!



  • hmm.. das versteh ich nicht. denn es SOLLTE ja auch eigentlich so funktionieren. dass es jetzt bei dir geht verwundert mich umso mehr.
    also nach ganz links bekomm ich es ja auch .. nur dann mittig. aber sobald ich das TOP mit reinbringe bleibt meine box leer.

    hast du ne idee wie ich das überprüfen kann warum das so ist? wie ich da jetzt am besten nach dem fehler suche ??

    danke dir vielmals !!!


  • Mod

    Du erzeugst doch noch einen Bar mit CommandBar_Create!
    Kann es sein, dass dieses Element einfach Deinen Text verdeckt!

    Du solltest Dir einfach mal Deinen Code ansehen, bzw. was wo in Deinem Fenster liegt! 🤡



  • stimmt du hast recht.. es liegt dann genau unter meiner menuebar.. wenn ich die ausblende steht der text an dieser stelle. dachte das wird automatisch runtergesetzt dann.. naja geirrt 🙂
    also muss ich dir koordinaten von hand eingeben ? ich würde es ja gerne direkt unter der menuebar haben.


  • Mod

    Dasnn besorge Dir doch die Koordinaten des Commandbars und justiere einfach rt.top!



  • ich hab es versucht.

    DrawText(hdc, lAbelTextBuffer,  _tcslen(lAbelTextBuffer), &rt, DT_SINGLELINE | DT_VCENTER | DT_CENTER ) ;
    			DrawText(hdc, mOdus, -1, rt.top, DT_SINGLELINE | DT_LEFT| DT_TOP ) ;
    

    aber dann bekomme ich eine fehlermedlung.

    -->Dasnn besorge Dir doch die Koordinaten des Commandbars.

    wie mache ich das denn? sorry bin noch nicht so firm in der ganzen sache 😕

    DANKE !!


  • Mod

    Dann solltest Du evtl. erstmal ein paar Basics lernen, bevor Du aktiv solche Tools baust...
    rt.top ist eine Koordinate und kein RECT, das DrawText erwartet! 👎

    case WM_PAINT:
                RECT rt, rb;
                hdc = BeginPaint(hWnd, &ps);
                GetClientRect(hWnd, &rt);
                GetWindowRect(g_hwndCB, &rb);
                rt.top += rb.bottom-rb.top;   
                DrawText(hdc, mOdus, -1, &rt, DT_SINGLELINE|DT_LEFT|DT_TOP) ; 
                EndPaint(hWnd, &ps);
                break;
    


  • das ist auf jeden fall einleuchtend 🙂

    und es funktioniert sogar !! 🙂

    vielen dank !!



  • ich habe noch eine frage 🙄
    hoffe du hilfst mir nochmal 🙂

    ich habe eine ausgabe auf meinem bildschirm die ich ebenfalls mit drawtext erzeuge.

    DrawText(hdc, lAbelTextBuffer,_tcslen(lAbelTextBuffer), &rt, DT_WORDBREAK | DT_VCENTER | DT_CENTER ) ;
    

    lAbelTextBuffer ist ein TCHAR und so gefüllt:

    401229702525

    401229702525

    401229702525

    401229702525

    HUI-9999-01-10L

    wenn ich, wie oben beschrieben, den string ausgeben möchte zeigt er mir aber immer nur den letzten wert an. also "HUI-9999-01-10L".
    kannst du mir sagen warum das so ist ? und wie ich das problem vllt lösen kann ?

    danke dir vielmals !!


  • Mod

    Weil Du einfach den Text überschreibst.
    Lies doch ienfach mal die Doku! Das wär doch mal was. Dann würdest Du auch wiossen, dass Du das Ausgabe Rectangle verändern musst.

    Ich beantworte auch Fragen von Neulingen, nur scheint mir bei Dir kein Lernwille/effekt vorhanden zu sein. Ich wünsche Dir noch einen guten Tag....



  • recht hast du. werde versuchen mich selbst weiter reinzuarbeiten. hoffe ich komme auf "berechtige" ungereimtheiten noch antwort 🙂 .. sonst bin ich erstmal lesen. 🙂

    danke


Anmelden zum Antworten