OnCreate Message/Funktion wird nich augerufen!!??
-
habe ein eingen CWnd Element( CGraphic), welche ich in einem Dialog anzeigen will.. diese Element erzeuge ich im dialog so:
BOOL CDlgVisMachine::OnInitDialog(){ CDialog::OnInitDialog(); p= new CGraphic(); p->Create(_T("System"), "Hi", WS_CHILD | WS_VISIBLE, CRect(0, 0, 500, 300), this, 1234); p->ShowWindow(SW_SHOW); p->UpdateWindow(); return TRUE; }Nun sollte eigenlich die Funktion OnCreate der CGraphic aufgerufen werden:
//header class CGraphic : public CWnd{ DECLARE_DYNAMIC(CGraphic) private: CDC *pDC; void VisSys(); public: CGraphic(); virtual ~CGraphic(); afx_msg int OnCreate(LPCREATESTRUCT lpCS); afx_msg void OnPaint(); protected: DECLARE_MESSAGE_MAP() }; // CPP /////////////////////////////////////////////////////// IMPLEMENT_DYNAMIC(CGraphic, CWnd) CGraphic::CGraphic(){ //pDC=NULL; } CGraphic::~CGraphic(){ } int CGraphic::OnCreate(LPCREATESTRUCT lpCS){ if (CWnd::OnCreate(lpCS) == -1) return -1; CDC *p = GetDC(); pDC->CreateCompatibleDC(p); LPRECT lpRC; GetWindowRect(lpRC); pDC->SetWindowOrg(lpRC->left,lpRC->top); pDC->SetWindowExt(lpRC->right,lpRC->bottom); VisSys(); return 0; } void CGraphic::OnPaint(){ PAINTSTRUCT ps; CDC* pReal = BeginPaint(&ps); //if(pDC!=NULL) pReal->BitBlt(0,0, 500, 300, pDC, 0, 0, SRCCOPY); EndPaint(&ps); CWnd::OnPaint(); } void CGraphic::VisSys(){ CBitmap *oldBitmap; CDC *pTemp; CBitmap *bitmap = new CBitmap(); pTemp->CreateCompatibleDC(pDC); //In Memory-DC zeichnen statt in "echtem" DeviceContext: //Bitmap von width*height Pixeln mit 32 Bit Farbtiefe erzeugen: //bitmap->LoadBitmap("test.bmp"); bitmap->LoadBitmap(IDB_BITMAP2); //bitmap->CreateBitmap ( intWidth, intHeight, 1, 32, NULL); //CSize o= bitmap->GetBitmapDimension(); int intWidth= 300;//o.cx; int intHeight= 300;//o.cy; //Kopieren der Bitmap in Temporären Device-Context: oldBitmap = pTemp->SelectObject (bitmap); pDC->BitBlt(100,50, intWidth, intHeight, pTemp, 0, 0, SRCCOPY); pDC->BitBlt(300,50, intWidth, intHeight, pTemp, 0, 0, SRCCOPY); pTemp->SelectObject(oldBitmap); pTemp->DeleteDC(); delete bitmap; } BEGIN_MESSAGE_MAP(CGraphic, CWnd) ON_WM_PAINT() ON_WM_CREATE() END_MESSAGE_MAP()er springt mir einfach nich in die OnCreate Funktion.. er stürtu bei "ShowWindow" siehe oben ab??
-
Dein Fenster wird gar nicht erzeugt.
Ich würde mal ein wenig Fehlerprüfung einbauen p->Create(_T("System"),...) returniert mit Sicherheit FALSE!Deine Fensterklasse heißt ja auch nicht System, oder?
Verpass Deinem Fenster erstmal einen korrekten Klassenamen!
-
ist diese String nich willkürlich drinierbar??? oder ist damit der name der Parent Fenster gemeint??
Muss ich das din dann "CGraphis" nennen oder wie?
ja die create funktion liefert fehler HWND ist = NULL!!
-
Nein! Dieser String ist nicht frei definierbar. Bitte registriere eine entsprechende Klasse. AfxRegisterClass heißt das Stichwort. Technisch gesehen solltest Du Deine eigene Create Funktion schreiben und PreCreateClass auch überschreiben um die entsprechende Klasse zu registrieren.
Wenn Du Dir das sparen willst musst Du den Klassennamen als NULL übergeben. In diesem Fall erzeugt die MFC eine passende Klasse.