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.
-
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); }
-
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
-
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 !!
-
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; }
-
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ß
susannedas 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 ) ;
-
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 !!!
-
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.
-
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 !!
-
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;