Drawtext positionieren. Rect einstellungen



  • Hallo,
    ich habe ein problem mit dem positionieren mit meinem text über drawtext. nachdem ich in einem anderen thread schon viel hilfe von martin bekommen habe, danke nochmal, habe ich alles etwas umstrukturiert. 🙂

    hier erstmal der code:

    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_SIZE:
          {
    
             HDC      hDC;
             RECT     TextRect;
    		 GetWindowRect(g_hwndCB, &rb);
    
             rect.left    = iRand;
             rect.top     = 0;//(rect.top + rb.bottom-rb.top);
             rect.right   = LOWORD(lParam) - iRand;
             rect.bottom  = HIWORD(lParam);
    
             TextRect     = rect;
    
             hDC = GetDC(hWnd);
             {
                DrawText(hDC, szText, lstrlen(szText), &TextRect, DT_WORDBREAK | DT_CALCRECT);
             }
             ReleaseDC(hWnd, hDC);
    
             if (TextRect.bottom > rect.bottom)
             {
                iScrollRange = (TextRect.bottom - rect.bottom) / iZeichenhoehe + 1;
                iScrollPos   = (iScrollRange < iScrollPos) ? iScrollRange : iScrollPos;
    
                SetScrollPos(hWnd, SB_VERT, iScrollPos, TRUE);
    
    			rect.top  =  -iScrollPos * iZeichenhoehe;
                //rect.top  = (rect.top + rb.bottom-rb.top) -iScrollPos * iZeichenhoehe;
             }
    
             else
             {
                iScrollRange = 0;
                rect.top     = 0;
             }
    
             SetScrollRange(hWnd, SB_VERT, 0, iScrollRange, TRUE);
    
             return 0;
          }
    
       case WM_PAINT:
          {
             PAINTSTRUCT   ps;
             HDC           hDC;
    
             hDC = BeginPaint(hWnd, &ps);
             {
                DrawText(hDC, szText, lstrlen(szText), &rect, DT_WORDBREAK);
             }
             EndPaint(hWnd, &ps);
    
             return 0;
          }
    

    etwas mehr und umfangreicher geworden da ich jetzt auch noch eine optionale scrollbar eingebaut habe.

    ich habe aber leider, wieder, das problem den text und die scrollbar zu positionieren.

    ich hatte schonmal hilfe von martin bekommen der mir dabei auch echt weiter geholfen hat.

    mein problem ist meine menuebar 🙂

    der text verschwindet teilweise dahinter. bei meinem alten code konnte ich rt.top neu berechnen und somit den text unter die menuebar setzen.

    aber irgednwie gelingt mir das hier nicht. ich hoffe ihr könnt mal drüber schauen.

    ich habe meinen versuch mal ausgeklammert, aber so müsste es doch eigentlich funktionieren oder? ich packe in mein rect die daten der menuebar und ziehe das von dem gesamten ab, wie es auch zuvor funktioniert hat.

    sowohl die scrollbar als auch den text an sich kann ich nicht runter setzen.

    warum geht das jetzt nicht mehr ??

    danke euch !


  • Mod

    Und warum erzeugs Du nicht einfach ein Edit Control und zeigste die Daten darin an. Das kann von selbst rollen!



  • also das mit der scrollbar hab ich jetzt schon hinbekommen.

    if (TextRect.bottom > rect.bottom)
             {
                iScrollRange = (TextRect.bottom - rect.bottom) / iZeichenhoehe + 1;
                iScrollPos   = (iScrollRange < iScrollPos) ? iScrollRange : iScrollPos;
    
                SetScrollPos(hWnd, SB_VERT, iScrollPos, TRUE);
    
                rect.top  =  -iScrollPos * iZeichenhoehe;
                //rect.top  = (rect.top + rb.bottom-rb.top) -iScrollPos * iZeichenhoehe;
             }
    
             else
             {
                iScrollRange = 0;
                rect.top     = 0;
             }
    

    dieser teil ist dafuer das das, wenn der text zu groß ist eine scrollbar erzeugt wird. also das habe ich schon hinbekommen 🙂

    es geht nur darum die scrolbar und den text zu positionieren. irgendwie scheint das schwieriger zu sein als letztes mal da ich jetzt erst die ausgabe berechne bevor ich sie ausgeben kann.

    wenn ich wie im alten code den rest von rect.top einfach abziehe geht das nicht.

    hast du noch ne idee ?


Anmelden zum Antworten