Wyświetlanie pixeli w obszarze okna windows.

0

Szukam pomysłu na realizacje wyświetlania pixeli w części okna programu.
Idea jest taka że mam kilka przycisków które zmieniają wartości dla algorytmu, wynikiem jego działania jest przebiegający krokowo wykres ( każde wciśnięcie jakiegoś przycisku generuje kolejny krok tego wykresu ).
Wynikiem pracy tego algorytmu mam pixel do wyświetlenia w pozycjach X/Y.

I teraz pytanie (pomysł ) jak to można by wyświetlić w konkretnym zamkniętym obszarze okna.
Za jakąś podpowiedź z góry dziękuję :)

1

Kolejka okna, złap event WM_PAINT i użyj SetPixel() :)

0
void draw(HDC hdc){
    SetPixel(hdc, 0, 0, RGB(0,0,0));
}

case WM_PAINT:{
    PAINSTRUCT ps;
    HDC hdc = BeginPaint(hwnd, &ps);
    draw(hdc);
    EndPaint(hwnd, &ps);
    break;
}
0

Ze stawianiem pixeli sobie ostatecznie poradziłem :) ale dziękuję za pomoc.

Pojawił się inny problem z rysowaniem linii , używam DrawLine i nie zależnie od koordynatów jakie podaje za każdym razem w obszarze w którym rysuje dostaję tylko wielki X w ramce :/ już kombinowałem z typami zmiennych etc we wszystkie strony i za każdym razem dostaje to samo. Czy problemem może być że koordynaty są zbyt blisko siebie ? (np. x=10,y=10,x2=10,y2=11 )
Rysuje te linie ze zbioru koordynatów pixeli które trzymam w kontenerze ( debugowałem i na 100% DrawLine dostaje poprawne wartości ).

0
plansza = panel1->CreateGraphics();
	COLORREF color;


	Pen^ Olowek = gcnew Pen(System::Drawing::Color::Navy);
	int tmpx, tmpy;
        dev_con = this->plansza->GetHdc();
	for (std::list<pixel_dos>::iterator it= eng->wykres.begin(); it != eng->wykres.end(); it++) // przejscie przez liste 
	{
		
		switch (it->color){
		
		default:
			
			
			
			tmpx = it->x;
			tmpy = it->y;
			if(it != eng->wykres.end())it++;
		
		       this->plansza->DrawLine(Olowek, tmpx,tmpy,it->x ,it->y );
		
                         break;
		}
		
	}
	plansza->ReleaseHdc();

Trochę zasyfione ale kombinuję we wszystkie strony właśnie ( chyba wszystko co nie potrzebne wywaliłem ).

0

W tym warunku if() jak załóżmy rysujesz ostatni element i przechodzisz przez ten warunek dodaje się 1 do iteratora, wtedy mamy .end() chwile potem używasz tego iteratora w drawline. Teoretycznie mi się program na czymś takim wysypywał

0

Po zerowe, w tagach masz c++ i winapi, a tu nagle wyjeżdżasz z kodem Windows Forms.
Nie wiesz w czym piszesz?

Po pierwsze, to if zawsze jest false, bo identyczny warunek masz w forze.
A po drugie,

        dev_con = this->plansza->GetHdc();

    plansza->ReleaseHdc();

Po co to?

1 użytkowników online, w tym zalogowanych: 0, gości: 1