C++ & C# Programming page
 

 

# Úvod
# Tvůrci
# C++
# C#
# Linky





Seriál o WinAPI objektech - 1. Díl

Button

Tímto zahajuji seriál o WinAPI objektech. V každém díle budu rozebírat funkce a použití různých prvků. V prvním se zaměřím na ten nejzákladnější prvek - tlačítko. Bez tlačítek by nebyl náš život plnohodnotný, dost lidí by nemělo "co mačkat" :)
Ještě než se dostanu k samotnému programu: WinAPI objekty můžete vytvořit dvojím způsobem. Buď půjde o programové vytvoření přes CreateWindowEx(...), kdy máte lepší kontrolu nad prvky, ale horší vizuální kontrolu, musíte si vše představit, nebo použijete vestavěný dialogový editor, z čehož pravděpodobně (kdo ví co probíhalo hlavou vývojářům v Micro$oftu) vznikl název Visual C++. Vizuální forma je lehká, blíží se to formulářům v C# a Delphi. Rozdíl je v tom, že díky volnosti obsluhy zpráv apod. v C++, musíte reakce psát i pro tyto dialogy vlastnoručně, překladač nevytvoří nějakou šablonu nebo základ, do kterého připíšete pár příkazů. (Ale stejně, to už by nebyla zábava, kdyby to vše dělal software, ne? :)
Já osobně chci použít v celém seriálu tuto možnost, pár chvil po vytvoření projektu je člověk schopen psát program, nemusí se zatěžovat drobnostmi. Takto například vypadá vstupní funkce MAIN:
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
DialogBox(hInstance, (LPCTSTR)IDD_MAIN, NULL, (DLGPROC)Main);
return 0;
}
Jediný příkaz vyvolá dialogové okno. O vytvoření, registraci a vše ostatní se stará VisualStudio. Pouze je nutné vytvořit si obsluhu zpráv.

Ale abych se už konečně dostal k samotnému tématu - tlačítko. Při obsluze jeho zpráv, můžeme dostat jen 2 informace. (Co víc taky s tlačítkem jiného) Kliknutí a double-klik. Prakticky se to ani neřeší. Samotná informace se předává ve WORDu. Ten se dále dělí na spodní a horní část. Ve spodní části získáváme identifikátor objektu, který zprávu vyvolal, ve vrchním je přesnější zpráva, jako například onen double-klik.
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_BUTTON:
MessageBox(hDlg, TEXT("Došlo k stistknutí!"), TEXT("INFO"), MB_ICONINFORMATION);
break;
Jak vidíte z tohoto výpisu, nejprve je zaslána zpráva WM_COMMAND, která určuje, že došlo k interakci s dialogovým prvke. Následuje zisk spodní části WORDu wParam. K viditelné reakci na zprávu jsem použil Windows informační okno, s jedinou možností odpovědi - OK.
A nyní se dostáváme k některým z funkcí, které lze provádět ve spojení s tlačítkem. Jen bych chtěl připomenout, že většina operací je přenositelná i na další prvky.

Zakázání tlačítka (zešednutí)
case IDC_DISABLE:
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON), FALSE);
// pro povolení staci pouzit parametr TRUE
break;

Změna textu tlačítka
case IDC_TEXT1:
SetDlgItemText(hDlg, IDC_BUTTON, TEXT("Velké tlačítko"));
break;

Ještě bych mohl přidat pár vychytávek a funkcí pro WinXP (a dál), ale to není tak důležité, už jen proto, že všichni ještě XP nemají. (Pokud ale někdo bude mít velký zájem, napište a já můžu udělat speciální článek.)

[ EXE soubor ] - [ Zdrojové kódy ]



Správce sekce: Dejvino



14.2 2005

C++: pridano par odkazu na clanky o OpenGL, IRC, POP3 a BMP
14.8 2004

C++: přidán klient pro Internet Relay Chat (IRC)
11.7 2004

C++: opravil jsem zdrojak WebServeru, byla tam navic jedna funkce kterou jsem nepridal a mnoho zacatecniku by si s tim nemuselo vedet rady...
27.6 2004

Vytvořen IRC kanál #c-prog na serveru Quakenet
10.6 2004

C++: přidán program WebServer, stojí za prohlédnutí!
5.6 2004

C++: přidán článek o CheckBoxu
29.5 2004

C++: přidán program WinSock Mail
28.5 2004

C#: přidán program DNStoIP
Vaše IP je 54.92.170.142
Stránka byla načtena za 0.01115 sekund.