WIN API WM_PAINT – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

WIN API    WM_PAINT – C / C++ – Fórum – Programujte.comWIN API WM_PAINT – C / C++ – Fórum – Programujte.com

 

unk
~ Anonymní uživatel
3 příspěvky
9. 4. 2013   #1
-
0
-

Som este zaciatocnik a preto by som sa chcel opytat, ze ked mam takyto kod:

switch(LOWORD(wParam))
           {
                                    case 1000:
                                         hdc=BeginPaint(hWnd,&ps);  
                                         MoveToEx(hdc,100,100,NULL);
                                         LineTo(hdc,150,150);
                                         EndPaint(hWnd,&ps); 
                                    case 1002:
                                         hdc=BeginPaint(hWnd,&ps);
                                         MoveToEx(hdc,50,50,NULL);
                                         LineTo(hdc,100,100);
                                         EndPaint(hWnd,&ps);
                  
           }

a stlacim napriklad tlacitko 1000 tak sa vykresli ciara a ked potom stlacim tlacitko 1002 tak sa nestane nic, a naopak...Chcel by som poradit ako to spravit tak , aby som cez tlacitka v menu mohol postupne vykreslit ciary.Pouzivam DEV C++.

Dakujem.

Nahlásit jako SPAM
IP: 62.152.234.–
vitamin+8
Grafoman
9. 4. 2013   #2
-
0
-

#1 unk
Na konci case-u by si mal dat break;

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
unk
~ Anonymní uživatel
3 příspěvky
9. 4. 2013   #3
-
0
-

okej, kod som zmenil na toto :

switch(LOWORD(wParam))
           {
                                    case 1000:
                                         hdc=BeginPaint(hWnd,&ps); 
                                         MoveToEx(hdc,100,100,NULL);
                                         LineTo(hdc,150,150);
                                         EndPaint(hWnd,&ps);
                                         break;
                                         return 0;
                                    case 1002:
                                         hdc=BeginPaint(hWnd,&ps);
                                         MoveToEx(hdc,50,50,NULL);
                                         LineTo(hdc,100,100);
                                         EndPaint(hWnd,&ps);
                                         break;
                                         return 0;
                 
           }
           return 0;

a bez najmensej zmeny...co by to este mohlo byt?

Nahlásit jako SPAM
IP: 62.152.234.–
Radek Chalupa
~ Redaktor
+1
Super člen
9. 4. 2013   #4
-
0
-

#1 unk
BeginPaint/EndPaint bys měl používat výhradně v obsluze zprávy WM_PAINT. Pokud chceš něco vykreslit jednorázově tak GetDC/ReleaseDC. Pokud chceš něco vykreslit na stisk tlačítka (resp. na nějaký WM_COMMAND), tak v té obsluze si uložit informace o tom co se má kreslit a zavolat RedrawWindow, což způsobí poslání WM_PAINT a v její obsluze si načteš informaci o tom co má být aktuálně vykreslené a vykreslíš to.

Podpis fórum

Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 213.220.211.–
unk
~ Anonymní uživatel
3 příspěvky
11. 4. 2013   #5
-
0
-

Hladal som vsade,guglil som ale nemohol som najst nejake prakticke pouzitie RedrawWindow...Mohol by si prosim ta napisat nejaku ukazku toho ako to pracuje?

Nahlásit jako SPAM
IP: 62.152.234.–
Radek Chalupa
~ Redaktor
+1
Super člen
12. 4. 2013   #6
-
0
-

#5 unk
RedrawWindow vyvolá zaslání zprávy WM_PAINT do procedury okna. Jinak je WM_PAINT posílaná pouze v prípadě že je okno potřeba aktualizovat (uživatel ho přepnul do popřední, část okna která byla překrytá jiným se zviditelnila apod.).

Například chceš mít v okně běžící digitální hodiny, s aktualizací, tj překreslením aktuálního času každou sekundu. Procedura okna pak může vypadat např. takhle: 

LRESULT CALLBACK WndProc(HWND hwnd, UINT zprava, WPARAM wparam, LPARAM lparam)
{

	switch (zprava)
	{
	case WM_CREATE:
		SetTimer(hwnd, 1, 1000, NULL);
		break;
	case WM_TIMER:
		RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
		break;
	case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hdc = BeginPaint(hwnd, &ps);
			SYSTEMTIME st;
			GetLocalTime(&st);
			wchar_t text[50];
			StringCbPrintf(text, sizeof(text), L"%d:%.2d:%.2d",
				st.wHour, st.wMinute, st.wSecond);
			TextOut(hdc, 10, 10, text, lstrlen(text));
			EndPaint(hwnd, &ps);
		}
		break;
	case WM_DESTROY:
		KillTimer(hwnd, 1);
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hwnd, zprava, wparam, lparam);
	}
	return 0;
}

Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 213.220.211.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 41 hostů

Podobná vlákna

Win 32 API — založil radvis

Win API — založil Midnight

Win 32 api Dialogy — založil whysper

Win API - Listbox — založil FP91

Win 32 API - Podokno — založil FanatiK

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý