Hey,
Ich habe ein seltsames und zugleich sehr ärgerliches Problem.
Ich wollte ein Statictext auf die Größe seiner Caption einstellen. Das klappt auch fast gut, denn manchmal ist der Statictext etwas zu groß oder etwas zu klein und ich weiß einfach nicht wie ich das fixen kann. Denn das Problem ist, dass ich die Hintergrundfarbe geändert habe, die aber nur direkt hinter dem Text die eingestellte Farbe hat, wenn der Statictext zu groß für die Caption ist, ist der Rest des Steuerelements leider grau.
Ich hab es mit folgendem Code realisiert:
Code:CRect c_RectStaticrect; CStatic* p_c_StaticDialogItem = (CStatic*)GetDlgItem(IDSC_PRFLMNGRUSRNMTXT); p_c_StaticDialogItem->GetWindowRect(c_RectStaticrect); // Ermittelte Koordinaten bzw Maße umwandeln ScreenToClient(&c_RectStaticrect); int iStaticWidth = c_RectStaticrect.Width(); int iStaticHeight = c_RectStaticrect.Height(); int iStaticPositionLeft = c_RectStaticrect.left; int iStaticPositionTop = c_RectStaticrect.top; CRect c_RectPicturerect; CStatic* p_c_StaticDialogItem2 = (CStatic*)GetDlgItem(IDPC_PRFLMNGRUSRNMBACKGRD); p_c_StaticDialogItem2->GetWindowRect(c_RectPicturerect); // Ermittelte Koordinaten bzw Maße umwandeln ScreenToClient(&c_RectPicturerect); int iPictureControlWidth = c_RectPicturerect.Width(); int iPictureControlHeight = c_RectPicturerect.Height(); int iPictureControlPositionLeft = c_RectPicturerect.left; int iPictureControlPositionTop = c_RectPicturerect.top; CDC* p_DeviceContext; p_DeviceContext = this->GetDlgItem(IDSC_PRFLMNGRUSRNMTXT)->GetDC(); CString c_StringUsername(get_ProfilebyIndex(m_cComboBoxAvailableProfiles.GetCurSel())->get_Username().c_str()); CSize c_SizeTextsize = p_DeviceContext->GetTextExtent(c_StringUsername); //c_SizeTextsize.cx += 12; p_c_StaticDialogItem->MoveWindow(((iPictureControlPositionLeft+(iPictureControlWidth/2))-(iStaticWidth/2)),((iPictureControlPositionTop+(iPictureControlHeight/2))-(iStaticHeight/2)),c_SizeTextsize.cx,c_SizeTextsize.cy,true); this->GetDlgItem(IDSC_PRFLMNGRUSRNMTXT)->SetWindowText(get_ProfilebyIndex(m_cComboBoxAvailableProfiles.GetCurSel())->get_Username().c_str());
Ich hoffe es gibt eine nicht allzu umständliche Lösung :/
MfG Artery
+ Antworten
Ergebnis 1 bis 11 von 11
MFC - Größe von Strings im Statictext
Diskussion über MFC - Größe von Strings im Statictext in C++: Compiler, IDEs, APIs der Kategorie Programmierung; Hey, Ich habe ein seltsames und zugleich sehr ärgerliches Problem. Ich wollte ein Statictext auf die Größe seiner Caption einstellen. ...
- 08.01.2012 21:10 #1
MFC - Größe von Strings im Statictext
- 09.01.2012 08:37 #2
Administrator + Moderator
C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
- Reg.-Datum
- 10.07.2001
- Ort
- Essen
- Beiträge
- 8.980
Das sollte nicht sein. Wie hast du die Hintergrundfarbe denn geändert?
Und nochmal die Frage: Sind diese ganzen grafischen Details wirklich Teil der Aufgabe, oder ist das nur Spielerei? Wenn du wirklich ein schickes GUI brauchst, solltest du das eher nicht mit MFC, sondern vielleicht mit WPF machen."Funktioniert nicht" ist keine ausreichende Problembeschreibung.
- 10.01.2012 14:14 #3
Ich habe die Hintergrundfarbe folgendermaßen geändert:
Naja letztlich ist es eigentlich nicht direkt Teil der Aufgabe, die Aufgabe war es eine Anwendung mit MFC zuschreiben und eben eine GUI drüber basteln, weil wir vorher alles mit der Konsole gemacht haben. Aber in anbetracht der Zeit, ich muss Donnerstag abgeben, bin ich einfach schon zu tief drin, es soll jetzt möglichst ohne viel Aufwand das bestehende funktioneren...Code:HBRUSH CProfilmanager::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Ändern Sie hier alle Attribute für den DC. if(pWnd->GetDlgCtrlID() == IDSC_PRFLMNGRACCPTPRFLTXT) { pDC->SetBkColor(RGB(149,247,161)); pDC->SetTextColor(RGB(255,255,255)); }
Also bitte gebt mir eine schnelle und einfache Antwort

MfG Artery
- 10.01.2012 14:23 #4
Administrator + Moderator
C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
- Reg.-Datum
- 10.07.2001
- Ort
- Essen
- Beiträge
- 8.980
Geändert von Klotzkopp (10.01.2012 um 14:43 Uhr)
"Funktioniert nicht" ist keine ausreichende Problembeschreibung.
- 10.01.2012 14:42 #5
Ohh..mmm.. Ja ich hatte das ihrgendwo aus dem Internet her :/
Wo finde ich denn dieses Beispiel? Bzw. kannstes mir nicht evt kurz zeigen?
Da ich wirklich untern hohen Zeitrdruck arbeite wäre das echt nett
MfG Artery
- 10.01.2012 14:43 #6
Administrator + Moderator
C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
- Reg.-Datum
- 10.07.2001
- Ort
- Essen
- Beiträge
- 8.980
"Funktioniert nicht" ist keine ausreichende Problembeschreibung.
- 10.01.2012 14:58 #7
:/
Ja toll, der Background ist jetzt aber nicht wirklich Transperent.
Denn ich habe hinter alle StaticTexte noch Picture Controls gelegt, jetzt sind die Backgrounds nicht einfach "durchlässig" und man sieht die Picture Controls, sonder einfach Weiß oder so..
- 10.01.2012 15:18 #8
- 10.01.2012 15:44 #9
So habe ich es jetzt, wie lege ich denn die Farbe fest?? Und ich dachte es soll transparent sein, ich checke das grad nicht..Code:HBRUSH CVokabeltrainer20enhancedView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Ändern Sie hier alle Attribute für den DC. if(pWnd->GetDlgCtrlID() == IDSC_PRFLBTNTXT) { pDC->SetBkMode(TRANSPARENT); //pDC->SetBkColor(RGB(149,247,161)); pDC->SetTextColor(RGB(255,255,255)); } // TODO: Gib einen anderen Pinsel zurück, wenn der Standard nicht erwünscht ist. return hbr; }
- 10.01.2012 16:00 #10
Administrator + Moderator
C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
- Reg.-Datum
- 10.07.2001
- Ort
- Essen
- Beiträge
- 8.980
Hast du dir den Bespielcode, die Kommentare und den Text drumherum überhaupt mal genauer angesehen?
Du musst den Texthintergrund und den Steuerelement-Hintergrund auf transparent setzen. Bisher setzt du nur den Texthintergrund, mit SetBkMode.
Den Steuerelement-Hintergrund steuerst du über den Brush, den die Methode zurückgibt.
Um es kurz zu machen:
in den if-Block.Code:hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
"Funktioniert nicht" ist keine ausreichende Problembeschreibung.
- 10.01.2012 17:14 #11
Ahh okay!
Wirklichen vielen vielen dank an dich!
Aktive Benutzer
Aktive Benutzer
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Ähnliche Themen
-
strings
Von wulfgang im Forum C++: Compiler, IDEs, APIsAntworten: 2Letzter Beitrag: 06.02.2009, 12:05 -
Datei Größe und Größe auf Datenträger?
Von netfireman im Forum Windows BetriebssystemeAntworten: 5Letzter Beitrag: 20.05.2008, 20:53 -
Strings
Von reuabreliz im Forum C und C++Antworten: 5Letzter Beitrag: 30.12.2006, 18:39 -
c++ strings?
Von Reality im Forum C und C++Antworten: 27Letzter Beitrag: 04.12.2006, 10:06 -
Strings in VBA
Von HangManAtWork im Forum Delphi/RPG+CL/SonstigeAntworten: 2Letzter Beitrag: 15.11.2001, 11:40
Die häufigsten Suchbegriffe für diese Seite:
Bisher noch keine Treffer von einer Suchmaschine

LinkBack URL
About LinkBacks
Zitieren