tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
1332
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    cyberds19 cyberds19 ist offline Rookie
    Registriert seit
    Sep 2005
    Beiträge
    8
    warum erhällt mein fenster kein command ?

    winmain mein child

    wndclass.lpfnWndProc=childProc;
    wndclass.lpszClassName=L"testchild";
    RegisterClassEx(&wndclass);

    childtest=CreateWindow(L"test",
    L"test",WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,CW_USEDEFAULT,300,600,NULL,NULL,hInstance,NULL);

    im childproc unter create:
    _beginthread(testthread,0,NULL);

    im testthread:

    UpdateWindow(childtest);

    das fenste malt sich aber nicht neu. was ist da faul ?
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Ein Fenster gehört immer einem Thread. Jeder Thread muss seine eigene MessagePump haben (MessagePump ist Peek/GetMessage, Translate-,DispatchMessage).

    Wird das Childfenster in einem Thread erzeugt? Versuche das Childfenster im Hauptthread zu erzeugen, das löst vermutlich die meisten Probleme.
     

  3. #3
    cyberds19 cyberds19 ist offline Rookie
    Registriert seit
    Sep 2005
    Beiträge
    8
    wie gesagt ich
    erzeuge in der winmein ein hauptfenster und ein childfenster.
    die werden sofort angezeigt.

    habe nur eine getmessage.

    wird das childfester aufgerufen ruft der im create nen _beginthread auf.

    daher verstehe ich ja nicht, dass auch nen sendmessage(hwndchild,wm_paint,0,0,);
    nicht funktioniert.
    habe jetzt rausgefunden, dass einzigste auf was das fenster reagiert ist:
    InvalidateRgn
    das kann aber doch nicht die lösung sein oder ?
    eigentlich müssten doch sendmessage und updatewindow auch funktionieren.
     

  4. #4
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    UpdateWindow löst ja nur etwas aus, wenn das Fenster als "dirty" markiert ist. Sprich, jemand hat drauf rumgemalt oder etwas verändert.

    Ein InvalidateRect (oder InvalidateRgn) machen das. Allein das sollte genügen. Wenn du nach Invalidatexxx direkt UpdateWindow aufrufst, müsste das Fenster danach neu dargestellt sein.
     

  5. #5
    cyberds19 cyberds19 ist offline Rookie
    Registriert seit
    Sep 2005
    Beiträge
    8
    ok danke das klappt.
    ich habe immer gedacht, nen updatwindow veranlasst immer zum neuzeichen.

    warum geht sendmessage(fenster,WM_PAINT,0,0) nicht ?
    das müsste doch auch nen repaint auslösen oder ?
     

  6. #6
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Jein, WM_PAINT sollte man nie manuell senden. WM_PAINT ist ja "nur" die Aufforderung an das HWND, sich selbst neu darzustellen. Windows übernimmt die neue Zeichnung aber nur, wenn das HWND irgendwo auch einen Bereich als "dirty" gekennzeichnet hat. Alles zur Optimierung
     

  7. #7
    cyberds19 cyberds19 ist offline Rookie
    Registriert seit
    Sep 2005
    Beiträge
    8
    ok danke also doch alles nen bisschen anders als java repaint.
     

Ähnliche Themen

  1. childfenster geht nicht mehr auf warum ?
    Von cyberds19 im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 28.07.08, 16:17
  2. Antworten: 2
    Letzter Beitrag: 30.12.07, 14:30
  3. UpdateWindow erzeugt keine WM_PAINT
    Von saibot83 im Forum VisualStudio & MFC
    Antworten: 6
    Letzter Beitrag: 20.10.06, 10:19
  4. ChildFenster verschwindet beim Minimieren
    Von SabineenibaS im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 06.04.06, 09:13
  5. Prüfen ob MDI Childfenster geladen ist
    Von SeeSharpNewBee im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 05.09.05, 19:44