000
12.02.2006, 22:35 Uhr
~Daniela
Gast
|
Hi,
ich hab ein MFC Programm mit SDI Architektur.
Darin eine Menüleiste.
Beim Drücken einer der Buttons wird ein Dialog aufgerufen, da gibt man 3 Werte ein ( RGB Wert für meine Punkte), bei ONOK werden die Werte übernommen. Das übernehmen klappt. Danach ruf ich Invalidate() auf aber es wird nichts neu gezeichnet.
Hab jetzt exra nen Actionhandler für LButtonDOwn gemacht damit mit linksklick manuell alles neugezeichnet wird.
Ich möchte aber direkt nachdem die Viewklasse die neuen RGB werte des Dialoges übernommen hat einen bereich neu zeichnen lassen. Die Invalidate bzw. invalidaterect aufrufe werden anscheinend ienfach ignoriert.
Hier mal die view klasse:
C++: |
// Ex05aV2View.cpp : Implementierung der Klasse CEx05aV2View //
#include "stdafx.h" #include "Ex05aV2.h"
#include "Ex05aV2Doc.h" #include "Ex05aV2View.h" #include "RGBBox.h"
#ifdef _DEBUG #define new DEBUG_NEW #endif
// CEx05aV2View
IMPLEMENT_DYNCREATE(CEx05aV2View, CView)
BEGIN_MESSAGE_MAP(CEx05aV2View, CView) ON_WM_PAINT() ON_WM_LBUTTONDOWN() END_MESSAGE_MAP()
// CEx05aV2View-Erstellung/Zerstörung
CEx05aV2View::CEx05aV2View() { // TODO: Hier Code zur Konstruktion einfügen }
CEx05aV2View::~CEx05aV2View() { }
BOOL CEx05aV2View::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Ändern Sie hier die Fensterklasse oder die Darstellung, indem Sie // CREATESTRUCT cs modifizieren.
return CView::PreCreateWindow(cs); }
// CEx05aV2View-Zeichnung
void CEx05aV2View::OnDraw(CDC* pDC) { for(int i = 0; i <= 200; i++) { for(int j = 0; j <= 200; j++) { pDC->SetPixel(i, j, RGB(theApp.r, theApp.g, theApp.b)); } } // TODO: Code zum Zeichnen der systemeigenen Daten hinzufügen }
// CEx05aV2View-Diagnose
#ifdef _DEBUG void CEx05aV2View::AssertValid() const { CView::AssertValid(); }
void CEx05aV2View::Dump(CDumpContext& dc) const { CView::Dump(dc); }
CEx05aV2Doc* CEx05aV2View::GetDocument() const // Nicht-Debugversion ist inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEx05aV2Doc))); return (CEx05aV2Doc*)m_pDocument; } #endif //_DEBUG
// CEx05aV2View-Meldungshandler void CEx05aV2View::OnRGBBox() { CRGBBox InsertRGB; if(InsertRGB.DoModal() == IDOK) { theApp.r = InsertRGB.m_nR; theApp.g = InsertRGB.m_nG; theApp.b = InsertRGB.m_nB; } Invalidate(NULL); // Funktioniert nicht }
void CEx05aV2View::OnLButtonDown(UINT nFlags, CPoint point) { Invalidate(); // Funktioniert }
|
Danke für eure Hilfe
Daniela
P.S. ich benutze Visual Studio 2005 Pro (gabs für Studenten an unserer FH kostenlos, MSDNAA Programm ) und Windows XP SP2 |