Zum Inhalt springen

MFC - Größe von Strings im Statictext


Artery

Empfohlene Beiträge

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:

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe die Hintergrundfarbe folgendermaßen geändert:

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

    }

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...

Also bitte gebt mir eine schnelle und einfache Antwort :D:D

MfG Artery

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe die Hintergrundfarbe folgendermaßen geändert:
So macht man das nicht.

Man setzt die Texthintergrundfarbe auf transparent und steuert die Hintergrundfarbe des Steuerlementes über den Rückgabewert der Methode, siehe Beispiel in der MSDN-Library.

Bearbeitet von Klotzkopp
Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

So habe ich es jetzt, wie lege ich denn die Farbe fest?? Und ich dachte es soll transparent sein, ich checke das grad nicht..

Link zu diesem Kommentar
Auf anderen Seiten teilen

So habe ich es jetzt, wie lege ich denn die Farbe fest??
Hast du dir den Bespielcode, die Kommentare und den Text drumherum überhaupt mal genauer angesehen?

Und ich dachte es soll transparent sein, ich checke das grad nicht..
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:

hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);

in den if-Block.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...