WMPAINT, kann den Text nicht positionieren.



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

    Code:

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

    so wird der Text momentan mittig,links dargestellt. ich möchte aber das er oben links im fenster zu sehen ist. wenn ich DT_TOP verwende wird gar kein text mehr angezeigt.

    könnt ihr mir helfen ??

    vielen dank

    gruß
    susanne



  • sorry, meinte natürlich nicht WMPAINT sondern DrawText 🙂 .. sollte mir mal nen benutzernamen anlegen.


  • Mod

    Du gibst doch selbst das Rectangle an in dem der Text positionert werden soll! Gib die richtigen Koordinaten an, daann wird auch korrekt gezeichnet.



  • meinst du diesen teil ??
    ich weiss leider nicht an welcher stelle ich was ändern muss.oder ist das gar nicht das richtige?

    danke !!

    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);
    			}
    

  • 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;
    

Anmelden zum Antworten