Memory DC schickt Bitmaps ins Nirvana



  • Da sowohl Petzold als auch die Online-Dokumentation von MSVC++ aus Memory DC ein Geheimnis machen, hier meine völlig idiotische Frage:
    Warum gibt WM_PAINT nichts wieder? In WM_LBUTTONDOWN werden meine Rechtecke virtuell gezeichnet, gehen dann aber auf der langen Reise nach WM_PAINT verloren.

    case WM_LBUTTONDOWN:
    hdc=GetDC(hWnd);
    hdcMem= CreateCompatibleDC (hdc);
    memBM=CreateCompatibleBitmap (hdc,cxClient,cyClient);
    SelectObject(hdcMem, memBM);
    rechteck(hdcMem, cxClient, cyClient, sooft);
    ReleaseDC(hWnd, hdc);
    break;

    (...)

    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    BitBlt(hdc, 0, 0, cxClient, cyClient, hdcMem, 0, 0, SRCCOPY);
    EndPaint(hWnd, &ps);
    break;

    Ich weiß, dass ich ganz bestimmt einen ganz groben Fehler begangen habe. Wurde aber aus Petzold & Co. kein bisschen schlauer.



  • Alexander Rahm schrieb:

    case WM_LBUTTONDOWN:
    	hdc=GetDC(hWnd);
    	hdcMem= CreateCompatibleDC (hdc);
    	memBM=CreateCompatibleBitmap (hdc,cxClient,cyClient);
    	SelectObject(hdcMem, memBM);
    	rechteck(hdcMem, cxClient, cyClient, sooft);
    	ReleaseDC(hWnd, hdc);
    	break;
    

    probier mal so ähnlich...

    case WM_LBUTTONDOWN:
    {
       static BOOL flag = FALSE;
       if (flag == FALSE)
       { 
          flag = TRUE;
          hdc=GetDC(hWnd);
          hdcMem= CreateCompatibleDC (hdc);
          memBM=CreateCompatibleBitmap (hdc,cxClient,cyClient);
          SelectObject(hdcMem, memBM);
          ReleaseDC(hWnd, hdc);
       }
       rechteck(hdcMem, cxClient, cyClient, sooft);
    }
    break;
    


  • Ich glaube das Erstellen des Memory DCs gehört eher nach WM_SIZE.



  • glaube schrieb:

    Ich glaube das Erstellen des Memory DCs gehört eher nach WM_SIZE.

    wenn schon, dann zu WM_CREATE oder alles was man sonst noch als 'konstruktor' missbrauchen kann.



  • @net:
    ändert nichts, Bitmap wird nicht ausgegeben.



  • Alexander Rahm schrieb:

    @net:
    ändert nichts, Bitmap wird nicht ausgegeben.

    na dann geh mit'm debugger rein und guck dir vor allem die rückgabewerte der createcompatibleBlah...-funktionen an


Anmelden zum Antworten