Zum Inhalt springen

MFC - Bitmaps/Steuerlemente anordnung


Artery

Empfohlene Beiträge

Hallo leute,

Ich muss für die Schule ein MFC-Projekt machen. (Vorne weg ich bin von MFC kein Stück überzeugt, ganz ehrlich es ist ******e :D )

Naja jedenfalls, ich scheitere schon allein am Layout meiner Anwendung!

Also ich habe das ganze Dialogfeldbasierend gemacht.

Ich möchte jetzt mehrere Bitmaps und ein paar Buttons auf dem Fenster anordnen.

Nur ich kriege es einfach nicht gebacken, dass sie richtig angeordnet sind. Also z.b. eine Bitmap im Hintergrund, darüber paar Buttons, aber er ordnet alles immer unterschiedlich an (z.b. das eine über dem anderen, wenn ich die transperenz verändere, wieder ganz anders usw.), wenn ich 3 Bitmaps habe sehe ich die dritte (als letztes hinzugefügte) überhaupt nicht!

Kann man nicht einfach sagen dieses Objekt soll ganz in den Hintergrund, das dadrüber und das 3te ganz in den Vordergrund?

Auch wenn ich das Fenster start, soll er 2 Bitmaps auf 2 Buttons laden, macht es bei einem. Den anderen sehe ich nur wenn ich mit der Maus drüber gehe...

Darüber hinaus wenn ich die Größe des Fensters einstellen will, habe ich nur die Möglichkeit gefunden es mit der Maus verschiedenen groß zu ziehen. Habe es so eingestellt das unten 642x482 steht, wenn ich hab eine Bitmap mit z.b. der Breite 642 drauf packe ist sie viel zu klein erst bei 942 passt sie richtig drauf wieso das??

Also ganz ehrlich da war VB tausendmal besser...

Ich hoffe ihr könnt mir helfen, weil ich richtig am verzweifeln bin was die Gestaltung angeht...

MfG Artery

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann man nicht einfach sagen dieses Objekt soll ganz in den Hintergrund, das dadrüber und das 3te ganz in den Vordergrund?
Mit Format -> Tab Order kannst du die Reihenfolge einstellen.

Auch wenn ich das Fenster start, soll er 2 Bitmaps auf 2 Buttons laden, macht es bei einem. Den anderen sehe ich nur wenn ich mit der Maus drüber gehe...
Dann hast du wohl etwas falsch gemacht. Da du nicht beschreibst, was du gemacht hast, ist dir hier schwer zu helfen.

Habe es so eingestellt das unten 642x482 steht, wenn ich hab eine Bitmap mit z.b. der Breite 642 drauf packe ist sie viel zu klein erst bei 942 passt sie richtig drauf wieso das??
Weil die Größenangaben nicht in Pixel angegeben sind, sondern in "Dialog Units"

Ich hoffe ihr könnt mir helfen, weil ich richtig am verzweifeln bin was die Gestaltung angeht...
Ist die Gestaltung denn ein wichtiger Bestandteil des Projekts, oder legst du da vielleicht gerade zu viel Wert auf unnötiges Blendwerk?
Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay das mit der anordnung hat geklappt! Vielen Dank...

Wie kriege ich denn die Größe des Dialogs in Pixeln hin?

Und noch eine Frage, wie kann ich Statictext so modifizieren dass man nur die Schrift sieht? Kann man auch Schriftarten importieren?

Ich würde gerne eine Schriftart benutzen die ich in Photoshop habe..

MfG Artery

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habs jetzt so zur hälfte mit der Schrift hinbekommen, aber eine sache klappt immer noch nicht, ich will die Schriftgröße eines einzelnen StaticText ändern, kann mir mal jemand bitte helfen??

€dit:

void CVokabeltrainer20enhancedView::OnPaint()

{

	//CPaintDC dc(this); // device context for painting

	// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein.

	// CFormView::OnPaint() soll zum Zeichnen von Meldungen nicht aufgerufen werden.


	//CFont schrift;

	//CString ABCDE ="Arial";


	CPaintDC dc(this);


	schrift.CreateFont(29, 0, 0, 0, FW_BOLD, 0, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, _T("Consolas"));


	CStatic *ed=(CStatic*)GetDlgItem(IDC_STATIC222);

	ed->SetFont(&schrift);


	GetDlgItem(IDC_STATIC222)->SetWindowText(_T("Ghostmode"));  

}

So habe ich es jetzt und Schrift ist ne public in der View Class!

Aber ich bekomme nach dem Start eine fehler Meldung "Debug Assertion Failed..." aber ich sehe dass die Schrift richtig übernommen wurde und es anscheinend eingeschränkt funktioniert.. ich verstehe nur nicht was mir die Fehler Meldung sagen soll bzw. wodurch sie ausgelöst wird..

Bearbeitet von Artery
Link zu diesem Kommentar
Auf anderen Seiten teilen

So habe ich es jetzt und Schrift ist ne public in der View Class!
CreateFont in OnPaint ist keine gute Idee. Mach das im View-Konstruktor.

Aber ich bekomme nach dem Start eine fehler Meldung "Debug Assertion Failed..." aber ich sehe dass die Schrift richtig übernommen wurde und es anscheinend eingeschränkt funktioniert.. ich verstehe nur nicht was mir die Fehler Meldung sagen soll bzw. wodurch sie ausgelöst wird..
Da du den relevanten Teil der Meldung weggelassen hast, können wir dir auch nicht helfen. Wirf den Debugger an und schau im Callstack nach, woher die Meldung kommt. Bearbeitet von Klotzkopp
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe das Ganze jetzt in "OnInitialUpdate()" gepackt und jetzt funktioniert es einwandfrei!

So jetzt habe ich aber ein zweiten Dialog, wenn der geöffnet wird möchte ich wieder folgendes machen:

m_cFontButtonFont.CreateFont(8, 0, 0, 0, FW_BOLD, 0, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, _T("Consolas"));

	CStatic *p_cStaticEditElement=(CStatic*)GetDlgItem(IDSC_PRFLMNGRACCPTPRFLTXT);

	p_cStaticEditElement->SetFont(&m_cFontButtonFont);

	GetDlgItem(IDSC_PRFLMNGRACCPTPRFLTXT)->SetWindowText(_T("Ghostmode"));
Der Dialog hat jetzt eine Klasse die von DialogEX abgeleitet ist. Darin habe ich kein "OnIntialUpdate". Ich weiß jetzt nicht wo ich das hinpacken soll... Ich habe mir einfach eine Funktion geschrieben in der das nun passieren soll. Ich war mir nicht ganz sicher wie ich sie aufrufen soll, also wenn ich sie nachdem Konstruktor aufrufe bekomme ich wieder nen Fehler.
CWnd* CWnd::GetDlgItem(int nID) const

{

	[COLOR="red"]ASSERT(::IsWindow(m_hWnd));[/COLOR]


	if (m_pCtrlCont == NULL)

		return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID));

	else

		return m_pCtrlCont->GetDlgItem(nID);

}
in m_hWnd steht "unused = ???" Das scheint jetzt glaube ich das Problem zu sein, weil ich die Funktion aufrufe bevor ich:
if(c_ProfilmangerNewProfilWindow.DoModal() == IDOK)

	{...

}

aufrufe.

er hat iwie kein Fenster oder so hat keine ahnung...

Nur ich wüsste auch nicht was ich machen sollte um es dazwischen zupacken. Ich weiß einfach nicht genau was .DoModal() macht nur das es iwie das Fenster aufruft... Aber ich weiß auch nicht genau wann in die if-bedingung gesprungen wird.

Ich hoffe ihr könnt mir ihrgendwie helfen, ich bin so sehr am verzweifeln und ausrasten...

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