CombineRgn - Problem



  • Schönen guten Tag.

    Ich habe ein Problem mit der CombineRgn-Funktion.
    Ich habe einen Bereich auf meinem Fenster von 20-520 (sowohl Breite als auch Höhe) und 2 Textfelder an der Stelle 100, 540 und 300, 540. Diese werden ständig neu gezeichnet und desswegen will ich eine Region nur für diesen Zeichenbereich anlegen. Das klappt aber nicht so wie ich will (da wird dann gar nix mehr gezeichnet).

    Mein Code sieht so aus:

    void sort::DrawPixels(HWND hwnd)
    {
    	HDC hdc;
    	HRGN hRgn, hRgnPixels, hRgnSwaps, hRgnComparisons, hRgnStatus;
    	PAINTSTRUCT ps;
    	int i;
    	TCHAR szBuffer[7];
    
    	hRgnPixels=CreateRectRgn(20, 20, 520, 520);
    	hRgnComparisons=CreateRectRgn(100, 540, 50, 25);
    	hRgnSwaps=CreateRectRgn(300, 540, 50, 25);
    	CombineRgn(hRgnStatus, hRgnComparisons, hRgnSwaps, RGN_OR);
    	CombineRgn(hRgn, hRgnPixels, hRgnStatus, RGN_OR);
    
    	InvalidateRgn(hwnd, hRgn, TRUE);
    	hdc = BeginPaint(hwnd, &ps);
    
    	for(i=0;i<MAX_PIXELS;i++)
    	{
    		SetPixel(hdc, i+20, pixels[i]+20, 0);
    	}
    
    	itoa(swaps, szBuffer, 7);
    	//TextOut(hdc, 20, 540, TEXT("Swaps:"), 6);	
    	TextOut(hdc, 100, 540, szBuffer, lstrlen(szBuffer));
    	itoa(comp, szBuffer, 5);
    	//TextOut(hdc, 170, 540, TEXT("Comparisons:"), 12);
    	TextOut(hdc, 300, 540, szBuffer, lstrlen(szBuffer));
    	UpdateWindow(hwnd);
    	EndPaint(hwnd, &ps);
    };
    

    Was ist da der Fehler? kann ich auch gleich eine Region aus 3 einzelnen zusammenfügen, oder geht das nur so, wie ich es hier auch gemacht habe mit 2 mal CombineRgn? Ist es auch sinnvoller die Region nur einmal beim öffnen des Fensters anzulegen (ich denke schon)?

    Damit ihr evtl. nicht erst nachschauen müsst hier die Funktion CombineRgn:
    CombineRgn(Zielregion, Region1, Region2, Art des zusammenfügens);

    Vielen Dank schonmal im vorraus.

    Grüße,
    Max



  • Hat sich erledigt ich hab das Problem gerade gelößt.

    Für die, die es interessiert:

    Die letzten 2 Parameter von CreateRectRgn ist nicht die Breite und Höhe, sondern die Koordinate des Punktes unten rechts, und außerdem müssen die Regions vor dem Kombinieren initialisiert werden, also sieht das jetzt so aus:

    hRgnPixels=CreateRectRgn(20, 20, 520, 520);
    	hRgnComparisons=CreateRectRgn(100, 540, 170, 570);
    	hRgnSwaps=CreateRectRgn(300, 540, 370, 570);
    	hRgnStatus=CreateRectRgn(0,0,1,1);
    	hRgn=CreateRectRgn(0,0,1,1);
    	CombineRgn(hRgnStatus, hRgnComparisons, hRgnSwaps, RGN_OR);
    	CombineRgn(hRgn, hRgnPixels, hRgnStatus, RGN_OR);
    

    Gruß
    Max


Anmelden zum Antworten