C++ & C# Programming page
 

 

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





Ukázkový program Watch - 2. díl

Minulý díl pojednával o vytvoředí základního engine aplikace Watch. Už tehdy bylo známo, co mu chybí. V tomto díle se pokusíme program trochu přikrášlit funkcemi. A co vše je v nové verzi přidáno? Na první pohled se skoro nic nestalo, avšak při kliku pravým tlačítkem do okna aplikace, vykoukne na nás menu. 1. a největší změna, je přidání budíku. Hned po něm, byla vytvořena související funkce a to zvolení zvuku. Prozatím není možné vybírat si přímo soubor, uživatel má na výběr z pípnutím PC speakeru, zvuku kukaček a zvuku poplachu. Jako další pěkná vychytávka byla použita shell funkce na spuštění webové adresy implicitním prohlížečem z programu, jako reakce na stisk tlačítka. Také se dozvíme, jak pracovat se soubory a s dialogovým prvkem Radio Button.
Poznamenávám, že nebudu vypisovat celé funkce atd, zájemci budou mít opět možnost stáhnout si zdrojové kódy.

Práce se soubory

HANDLE hFile; // vytvoreni handle na soubor
DWORD dwActBytes;  // kontrola zapsanych bajtu
hFile = CreateFile( "config.dat", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // nacteni, popripade vytvoreni souboru
TCHAR szBuf[10];
ReadFile( hFile, szBuf, sizeof(szBuf), &dwActBytes, NULL); // nacteni dat o velikosti szBuf
SysTime.hodina = atoi(szBuf);  // konverze z textu na cislo
// jeste opakovat pro minuty a vteriny
ReadFile( hFile, szBuf, sizeof(szBuf), &dwActBytes, NULL); // nacteni cisla vybraneho zvuku
Zvuk = atoi(szBuf); // konverze z textu na cislo
CloseHandle( hFile ); // a znovu uklid

// prace

HANDLE hFile; // znovu handle souboru
DWORD dwActBytes; // ukladani je v jine funkci, takze musime dwActBytes znovu deklarovat
DeleteFile("config.dat");  // smazeme soubor, kdyby existoval tak by bylo nebezpeci ze dojde k problemum u prepisu
hFile = CreateFile( "config.dat", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
TCHAR szBuf[10];
_itoa(SysTime.hodina, szBuf, 10); // konverze z cisla na text
WriteFile(hFile, szBuf, sizeof(szBuf), &dwActBytes, NULL); // zapis dat o velikosti szBuff
// opakovat pro minuty a vteriny
_itoa(Zvuk, szBuf, 10); // to same v blede modrem pro cislo zvuku
WriteFile(hFile, szBuf, sizeof(szBuf), &dwActBytes, NULL);
CloseHandle( hFile );
EndDialog(hDlg, LOWORD(wParam)); // ukladani provadime pri ukoncovani dialogu
PostQuitMessage(0); // nebo pri ukonceni cele aplikace (neni nutnost!)

Zápis do souboru je poměrně jednoduchý. Stačí vytvořit handle na soubor, zavolat CreateFile, nastavit jméno souboru a atributy a vesele psat/zapisovat pomocí funkce WriteFile/ReadFile. Jediná zvláštost možná je, že musíme zadávat pokaždé jak velký počet dat má být do proměnné převeden. Zde může vzniknout problém, pokud při načítání použijeme odlišné velikosti, celý soubor se rozhodí a jsme v ******. Proto je dobré pečlivě udržovat "souborový protokol", aby k tomuto nedošlo. Jinak podobně jako u GDI, končíme práci uvolněním objektů - handle souboru.

Přehrávání zvuků

Věc, bez které se žádná hra neobejde. Aplikace většinou zvuky používají silně omezeně, třeba u varování a podobně, já je použil k "probuzení" člověka.

PlaySound(MAKEINTRESOURCE(IDR_WAVE1), hInst, SND_RESOURCE | SND_ASYNC);

Tento relativně jednoduchý příkaz přehraje zvuk z resources, bez čekání na dokončení (Další informace si prosím najděte v MSDN dokumentaci). Pokud však chcete, aby překladač rozpoznal tuto funkci, musíte přidat do include části tyto 2 řádky:

#pragma comment(lib, "winmm.lib")
#include "mmsystem.h"

Jedná se o knihovnu a hlavičkový soubor, obsahující práci se zvukem.
Tato funkce je veliká výhoda oproti předcházejícímu Visual C++ 6, kde nebyla pořádná podpora přehrávání zvuků ze "zdrojů" aplikace.

Práce s Checkbox a Radio Button

Zdálo by se, že na Checkboxy apod. budou speciální zjišťovací funkce pro každý typ zvlášť, jenže tyto prvky jsou brány jako tlačítka. Díky tomu nám stačí pamatovat si jen pár příkazů, platící pro všechny :)

if( Aktivni ) // test aktivniho checkboxu
      CheckDlgButton(hDlg, IDC_BUDIKON, BST_CHECKED); // nastavime zaskrtnuto
else
      CheckDlgButton(hDlg, IDC_BUDIKON, BST_UNCHECKED); // nastavime prazdne

Ještě je jeden stav a to "zešedlý", opět se podívejte do helpu pro přesnější informace.

BOOL Aktivni = IsDlgButtonChecked(hDlg, IDC_BUDIKON) = = BST_CHECKED;

Tato funkce navráti TRUE, pokud CheckBox je takzvaně "checked", jinak FALSE. Tuto funkci můžeme stejně tak použít u Radio Buttonu. Jak jsem již řekl o pár řádků výš, platí stejné funkce pro více druhů tlačítek, pro systém jsou to skoro ty samé objekty.

Speciální Shell funkce jako "přídavek"

ShellExecute(NULL, TEXT("open"), TEXT("http://c-programming.wz.cz"), NULL, NULL, SW_SHOW);

Konkrétně tato funkce vás po spuštění zavede na stránku c-programming.wz.cz, ale to není vše, co ShellExecute umí. Poohlédněte se v dokumentaci, po jejím dalším použití. (Asi vám už prijdu s tím odkazováním trapný, ale často stačí vědět kde a co začít hledat a rázem je v dokumentaci to, co opravdu chcete :) )

Tak to je vše prozatím, už začíná vylézat slunce nad obzor a já bych možná mohl jít spát ;)
V příštím díle bych se rád zaměřil na minmalizaci do Tray ikony a na volení specifického souboru z disku, který bude použit jako zvuk budíku.

A pokud stále čtete kvůli zdrojákům a exe souboru, tak ty jsou zde:

[ EXE soubor ] [ Zdrojáky ]



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 107.20.115.174
Stránka byla načtena za 0.02498 sekund.