Mehrere Fragen zu Visual C++

stephanl

Mitglied
Hallo,

ich bin ganz neu in C++ habe mir ein Buch gekauft, muss aber trotzdem fragen: Dann fange ich mal an :) Ich habe Visual C++ Autoren Edition...

Ich habe einen Dialog, der das gesamte Fenster überdeckt, doch wenn ich nun die Windows Taste drücke und dann wieder durch klicken auf das taskleistensymbol in mein Programm zurückkehren möchte, sind alle Buttons und Texte verschwunden... Woran kann das liegen?

Dann habe ich noch ein Problem: Ich habe zwar in meinem Buch eine Beschreibung, wie man eine Datenbank öffnet, doch habe ich das nicht kapiert. Kann mir jemand das für eine SQL erklären? Also es soll z.B. die Einträge in eine Auswahlbox listen oder einfach als "Textlink" ausgeben, geht das?

Dann habe ich mir gedacht, man könnte doch einen Vorspann einbinden, also will ich eine AVI Datei öffnen, kein Problem, doch wie mache ich das, dass ich sage, wenn die Datei abgelaufen, also am Ende ist, soll es weitergehen, oder wenn der User Leertaste oder Esc drückt?

Ich weiß, wie man Buttons "verlinkt", doch wie geht das mit Text? Ich habe schonmal probiert, doch dann kam ein Fehler und das Programm ging nicht mehr...

Und zu guter Letzt möchte ich noch eine Variable an einen anderen Dialog im gleichen Projekt übergeben, und zwar über Textlinks oder Buttons, wie geht das?

Danke schon mal für Antworten, ich begebe mich hier auf ein ganz neues Gebiet. Wäre toll, wenn ihr mir helfen könntet.

Danke schon mal

Stephan
 
Ich habe einen Dialog, der das gesamte Fenster überdeckt, doch wenn ich nun die Windows Taste drücke und dann wieder durch klicken auf das taskleistensymbol in mein Programm zurückkehren möchte, sind alle Buttons und Texte verschwunden... Woran kann das liegen?
Das könnte an der OnPaint() liegen.

1.) Wenn du ganz neu bist bei C++, dann vergiss bitte sämtliche GUI-Anwendungen und im besonderen das was der Assistent von VC++ erstellt.

2.) Zu den restlichen Fragen kann ich dich nur auf 1. verweisen.

Gruß Homer
 
Hmm, aber ich möchte das doch lösen... Mein OnPaint sieht so aus:

Code:
void CTestDlg::OnPaint() 
{
	CBitmap bmpBitmap; 
bmpBitmap.LoadBitmap(main_design); 

BITMAP bm; 
bmpBitmap.GetBitmap(&bm); 

CDC* pDC = GetDC(); 
CDC dcMem; 
dcMem.CreateCompatibleDC(pDC); 
dcMem.SelectObject(bmpBitmap); 

CRect lRect; 
GetClientRect(lRect); 
lRect.NormalizeRect(); 
pDC->StretchBlt(0, 0, lRect.Width(), lRect.Height(), 
   &dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); 
   CDialog::OnPaint(); 

	
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
 
Tja sieht so aus als ob du ein Bitmap als "Hintergrund" verwendest.
Dabei löschst du die Buttons, d.h. du müsstest ans Ende deiner OnPaint Methode alle Buttons neu Zeichnen lassen.
 
Du musst für jeden Button ein Objekt in deiner Klasse erstellen und danach dieses Objekt bzw. das Fenster neu Zeichnen (z.B.: RedrawWindow)
 
und wie geht so etwas?

Ich weiß, das ist eine dumme Frage, aber in meinem 2000 Seiten Buch, wird nichts mit Buttons behandelt :(
 
Mit dem KlassenAssistenten/ClassWizard kannst du dir memberVariablen für die Buttons erstellen und dann in OnPaint halt RedrawButton aufrufen.
 
Aha! Also dann hinter

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);

void RedrawButton(int Membervariable)

oder hinter das OnPaint in der letzten Klammer?

Danke schon mal


Stephan :)
 

Neue Beiträge

Zurück