Winapi textury tlačítek – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Winapi textury tlačítek – C / C++ – Fórum – Programujte.comWinapi textury tlačítek – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
ProXicT0
Návštěvník
11. 10. 2013   #1
-
0
-

Zdravím, 

už delší dobu se snažím aplikovat texturu na tlačítko, ale nic mi zatím nefungovalo, tak prosím vás profíky o pomoc ;-)

  Toto mám globálně:

HINSTANCE hInstance;
HWND button;
#define IDB_BITMAP1 "Texture.bmp"

A zde se marně snažím aplikovat texturu:

case WM_CREATE:
	{
		button = CreateWindow(
			TEXT("BUTTON"),
			TEXT("button"),
			BS_BITMAP | WS_CHILD | WS_VISIBLE,
			5, 5, //Pozice Tlačítka
			200, 200,//Velikost Tlačítka
			hwnd,
			(HMENU)ID_BUTTON,
			(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
			NULL,
			);
		
		}
	return 0;

	case WM_PAINT:
	{
		PAINTSTRUCT ps;
		HDC hdc;

		hdc = BeginPaint(hwnd, &ps);
		HANDLE hbitmap = LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 32, 32, LR_DEFAULTCOLOR);
		SendMessage(button, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbitmap);
		EndPaint(hwnd, &ps);

	}
	return 0;

Předem děkuji za pomoc :-)

Nahlásit jako SPAM
IP: 77.240.98.–
ProXicT0
Návštěvník
12. 10. 2013   #2
-
0
-

Tak se mi podařilo aplikovat texturu pomocí  

SendMessage(button1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)(HBITMAP)LoadImage(NULL, IDB_BITMAP1, IMAGE_BITMAP, 130, 68, LR_LOADFROMFILE));

Ale teď mám další problém, nevím, jak mám měnit textury když např. najedu na tlačítlo myší, nebo když ho vyberu. Snad vás něco napadne ;-)

Nahlásit jako SPAM
IP: 77.240.98.–
Radek Chalupa
~ Redaktor
+1
Super člen
12. 10. 2013   #3
-
+1
-
Zajímavé

#2 ProXicT
Obávám se že (pokud i ten druhý případ voláš ve WM_PAINT), tak po nějaké době (překreslování) vyčerpáš systémové prostředky - konkrétně neuvolŇuješ handle bitmapy získané pomocí LoadImage.

Možnosti realizace textury/bitmapy na buttonu jsou popsané např. zde: http://www.radekchalupa.cz/clanky/?kod=205&obsah=40

Pokud jde o reakci na najetí myši, ukázka je zde: http://www.radekchalupa.cz/clanky/?kod=205&obsah=71, Je to sice už hodně starý článek s ukázkou v MFC, ale princip (obsluha WM_MOUSEMOVE a WM_MOUSELEAVE) je stejný.

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.–
Radek Chalupa
~ Redaktor
+1
Super člen
12. 10. 2013   #4
-
+1
-
Zajímavé
Nahlásit jako SPAM
IP: 213.220.211.–
ProXicT0
Návštěvník
12. 10. 2013   #5
-
0
-

#4 Radek Chalupa
Díky moc za odkyzy, uečitě se na to podívám. Když už jsme u těch tlačítek, nebylo by ještě možné nějakým způsobem zamezit vykreslování toho obtížného přerušovaného "focus" rámečku na tlačítkách, když na ně kliknu?

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

#5 ProXicT
Pokud si to budeš vykreslovat kompletně ve vlastní režii, tj. v obsluze WM_DRAWITEM (parent okna), tak se žádný "fokus" nevykreslí, můžeš ho samozřejmě volitelně kreslit pomocí DrawFocusRect.

Když to nastavuješ pomocí BM_SETIMAGE, tak se o vykreslení pozadí stará systém, včetně toho fokusu...

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.–
ProXicT0
Návštěvník
12. 10. 2013   #7
-
0
-

#6 Radek Chalupa
Tento problém bych ale rád vyřešil třeba i na radialboxes, checkboxech, lablech atd...tam žádnou texturu nevykresluji. Zkoušel jsem to udělat v MFC, tam se žádný FucusRect nevykresluje...

Nahlásit jako SPAM
IP: 77.240.98.–
Radek Chalupa
~ Redaktor
+1
Super člen
12. 10. 2013   #8
-
0
-

#7 ProXicT
Pokud ten který ovládací prvek podporuje tzv. uživatelské kreslení, musíš si ho vykreslit v obsluze WM_DRAWITEM rodičovského okna, jinak ho musíš subclassovat http://www.radekchalupa.cz/clanky/?kod=205&obsah=20 a vykreslit ho v jeho obsluze WM_PAINT.

Na vykreslení standardního vzhledu (bez "fokusu" který s můžeš volitelně vykreslit) jsou funkce DrawThemeBackground/DrawThemeBackgroundEx nebo (pokud je nastavený "klasický" skin Windows) DrawFrameControl.

Ale pro tyhle záležitosti to chce mít alespoň základní znalosti programování ve WinAPI, včetně. GDI...:

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.–
ProXicT0
Návštěvník
13. 10. 2013   #9
-
0
-

#8 Radek Chalupa
Winapi znám rozhodně lépe, než MFC, nějak se s tím poperu, díky moc ;-)

Nahlásit jako SPAM
IP: 77.240.98.–
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, 96 hostů

Podobná vlákna

Textury — založil lokem22

Textury — založil A-dy

Textury — založil Luko8525

Vložení textury — založil Malirka

OpenGL textury — založil Zelenáč

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ý