Refresh des Fensterhintergrundes
-
Hallo allerseits,
habe folgendes Problem: Ich möchte von einem Dialogfeld-Formular ein weiteres Formular öffnen, das soll jedoch ohne Dialogressource auskommen. (Jedes Steuerelement möchte ich per Hand anlegen)
pTestWnd =new tx(); DWORD m_dwStyle = WS_VISIBLE | WS_BORDER |WS_OVERLAPPED |WS_CAPTION| WS_SYSMENU |WS_CLIPCHILDREN | CS_HREDRAW | CS_VREDRAW;//| WS_THICKFRAME| WS_MINIMIZEBOX |WS_MAXIMIZEBOX; DWORD m_dwExStyle = WS_EX_DLGMODALFRAME; int is = pTestWnd->CreateEx(m_dwExStyle, AfxRegisterWndClass(0),"Tester", m_dwStyle,CRect(0,0,300,300),NULL, 0,NULL); ed=new CEdit(); ed->Create(WS_VISIBLE|WS_CHILD,CRect(10,10,100,100),pTestWnd, 1000); pTestWnd->ShowWindow(SW_SHOW);
Das ist der Aufruf, tx ist ein Formular, wo der Header so ausschaut
class tx : public CFrameWnd { // Konstruktion public: tx(); virtual ~tx(); };
Wenn ich das ganze so in Betrieb nehme, dann wird das Hauptfenster im Hintergrund nicht neu gezeichnet.
void tx::OnPaint() { CPaintDC dc(this); // device context for painting CRect rect; GetClientRect(&rect); CDC *pDC = GetDC(); if(pDC != NULL) { pDC->FillSolidRect(&rect,GetSysColor(COLOR_3DFACE)); ReleaseDC(pDC); } }
Wenn ich das mache gehts, aber ich frage mich, ob der Refresh nicht vom Framework auf eine einfachere Methode gemacht werden kann - eine Option im style oder so setzen.
Kann mir da jemand weiterhelfen?
Danke
joe
-
1. CFrameWnds sind nicht dafür gebaut Child Windows zu sein (Ausnahme MDI)
2. Erzeuge einfach ein leeres CFormView und erzeuge darin Deine Controls. Damit hast Du wenigstens schon mal ein korrektes Handling der Tastatur.
3. Wenn Du schon einen CPaintDC hast, warum besorgst Du Dir noch einen DC?Tipp: Lies mal ein paar Tutorilas zu Windows Programmierung oder ein Buch...
-
Danke für die schnelle Antwort.
Martin Richter schrieb:
2. Erzeuge einfach ein leeres CFormView und erzeuge darin Deine Controls. Damit hast Du wenigstens schon mal ein korrektes Handling der Tastatur.
Das verlangt ja wieder eine Dialogfeldressource, wenn ich das im Assistenten erstellen lasse.
Martin Richter schrieb:
3. Wenn Du schon einen CPaintDC hast, warum besorgst Du Dir noch einen DC?
Das hat mir ein Programmierer so geschrieben, weshalb ich mich dann gefragt habe, ob das alles so sinnvoll ist. Mir geht es derzeit erst mal um die Funktionalität, es ist wirklich ein "Testprojekt"
Martin Richter schrieb:
Tipp: Lies mal ein paar Tutorilas zu Windows Programmierung oder ein Buch...
http://www.cpp-tutor.de/mfc/ Das hab ich mir schon zu Gemüte geführt, bin aber für weitere Vorschläge sehr dankbar.
-
Wie ist das jetzt mit dem CFormView? In der MSDN steht doch, dass es eine Ressource benötigt?!
-
Ja und? Die kann doch leer sein...
-
Martin Richter schrieb:
Ja und? Die kann doch leer sein...
dann kann man ja gleich einen CDialog verwenden, oder?!
-
joerider schrieb:
Martin Richter schrieb:
Ja und? Die kann doch leer sein...
dann kann man ja gleich einen CDialog verwenden, oder?!
Nein! Ein CDialog ist kein CView!
Außerdem kann man auch ein leeres Dialog-Template im Speicher anlegen, wenn Dich die RC Datei ärgert und dieses laden...