Fehler beim zeichnen auf ein Fenster
-
Ich weiss nicht ob dies funktioniert!
Ich möchte, dass der Benutzer ein Logo auswählt und dieses dann auf dem Dialog angezeigt/ gezeichnet wird! Es müsst auch wieder sichtbar werden, wenn das Fenster von einem anderen überdeckt würde!Wie löse ich das?
-
Sag ich doch ...
In der Funktion, in der du das Icon auswählst, machst du einfach ein Invalidate(); dann wird OnPaint aufgerufen und dein Icon gezeichnt.
-
Ok nun funktioniert es wieder!
Habe es anders gelöst!
Wo finde ich onPaint? Ich habe dies nirgens!
Wieso sehe ich kein Bild? Es läuft alles durch aber ich sehe kein Bild!
Ich benutze die genau gleiche Funktion für den Drucker und da geht es ohne Probleme!Was muss ich ändern/ ergänzen damit es funktioniert?
-
Keine Ahnung, ich kenne deinen Code nciht. Les dich mal ein wenig in die MFC ein. ZB mit VC++ in 21 Tagen. So hat das keinen sinn.
-
Ich habe das Invalidate(); Das Logo wird gezeichnet. Wenn ich aber z.B auf den Desktop wechsle und dann wieder zur Form ist das Bild verschwunden. Wie stelle ich es an, dass das Bild immer da ist???
-
haste daws mit onpaint gemacht?
-
ja
Also ich rufe die Funktion in onPaint auf und vor dem Aufruf mache ich das Invalidate();
-
Du darfst net einfach ne funktion onPaint hinzufügen. SOndern du brauchst die Behandlungsfunktion für WM_PAINT. Kannst du über den Klassenassistenten hinzufügen.
-
Hab ich so gemacht!
Verstehe ich es falsch, dass Invalidate(); den Dialog neu zeichnet?
Wenn ich zuerst das Logo zeichne und dann Invalidate(); aufrufe ist, das Logo gleich wieder weg!
-
zeig mal deine grundeinstellungen.cpp
-
Ok
Hier ist die gesammt Datei Grundeinstellungen.cpp
// Grundeinstellungen.cpp: Implementierungsdatei // #include "stdafx.h" #include "ADS2.h" #include "ADS2Dlg.h" #include <atldbcli.h> #include <afxwin.h> #include "Grundeinstellungen.h" #include <afx.h> #include "sys/types.h" #include "Picture.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // Dialogfeld Diagrammoptionen Grundeinstellungen::Grundeinstellungen(CWnd* pParent /*=NULL*/) : CDialog(Grundeinstellungen::IDD, pParent) { //{{AFX_DATA_INIT(Grundeinstellungen) s_groesse = _T(""); s_firmenname = _T(""); //}}AFX_DATA_INIT laden(); } void Grundeinstellungen::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(Grundeinstellungen) DDX_Control(pDX, IDC_COMBO1, c_groesse); DDX_CBString(pDX, IDC_COMBO1, s_groesse); DDX_Text(pDX, IDC_EDIT2, s_firmenname); //}}AFX_DATA_MAP int x=8; CString help; while (x<64) { help.Format("%i", x); c_groesse.AddString(help); x=x+4; } } BEGIN_MESSAGE_MAP(Grundeinstellungen, CDialog) //{{AFX_MSG_MAP(Grundeinstellungen) ON_BN_CLICKED(IDC_BUTTON1, B_logo_suchen) ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Behandlungsroutinen für Nachrichten Grundeinstellungen void Grundeinstellungen::B_logo_suchen() { CFileDialog dlg(true,"",NULL,OFN_HIDEREADONLY,"Bitmap (*.bmp)|*.bmp|JPG (*.jpg)|*.jpg|JPEG (*.jpeg)|*.jpeg|Gif (*.gif)|*.gif|"); if(dlg.DoModal() == TRUE) { s_logopfad=dlg.GetPathName(); Invalidate(); logozeichnen(); } } void Grundeinstellungen::OnOK() { CString s_LineToRead; CStdioFile o_datei; UpdateData(TRUE); a_einstellungen[2]=s_firmenname; a_einstellungen[3]=s_groesse; a_einstellungen[4]=s_logopfad; o_datei.Open("E:\\options.ini", CFile::modeWrite); // Datei öffnen o_datei.SeekToBegin(); int x=0; while (x<13) { o_datei.WriteString(a_einstellungen[x]+"\n"); x++; } o_datei.Close(); CDialog::OnOK(); } void Grundeinstellungen::laden() { CString s_LineToRead; CStdioFile o_datei; o_datei.Open("E:\\options.ini", CFile::modeRead); // Datei öffnen o_datei.SeekToBegin(); o_datei.ReadString(s_LineToRead); while(!s_LineToRead.IsEmpty()) { a_einstellungen.Add(s_LineToRead); o_datei.ReadString(s_LineToRead); } o_datei.Close(); s_firmenname=a_einstellungen[2]; s_groesse=a_einstellungen[3]; s_logopfad=a_einstellungen[4]; //logozeichnen(); } void Grundeinstellungen::logozeichnen() { CPaintDC dclogo(this); CPicture m_picture; m_picture.Load(s_logopfad); m_picture.Show(&dclogo, CPoint(20,160), CPoint(240, 150), 0,0); } void Grundeinstellungen::OnPaint() { Invalidate(); logozeichnen(); CPaintDC dc(this); // device context for painting // Kein Aufruf von CDialog::OnPaint() für Zeichnungsnachrichten }
-
lol.
Lies meine Beiträge von der ersten Seite nochmals durch. Du hast so gut wie nix davon eingearbeitet. Musst dir shcon helfen lassen ...
-
Ups!
Vielen Dank funktioniert einwandfrei!