Kurz4 - Kapitola8

17. června 2007 v 15:39 | http://www.sweb.cz/kurz_evt/ |  Programování pro WinCE

6.8 Interval pro "učení"

Jako obvykle zařadíme jednu kratší (tzv. odpočinkovou) lekci. Dnes se pokusíme pouze zprovoznit funkci tlačítka "Learn". Toto tlačítko po zmáčknutí otevře 3 sekundový interval, během něhož můžeme vybrat tlačítko "0" až "15", které chceme naučit nový kód dálkového ovládání. Pokud v určené době nezmáčkneme některé z tlačítek, interval pro učení se ukončí a program se vrátí do standardního stavu.
Při této práci nebudeme psát mnoho zdrojového kódu, spíše si procvičíme práci s ClassWizardem. Jak také asi tušíte, použijeme z dřívějších kurzů známý prvek Windows - časovač.
Začneme tím, že si do našeho dialogu přidáme členskou proměnnou, která bude příznakem pro učení. Na třídě CIRRmtCnt klepněte pravým tlačítkem a zvolte Add Member Variable. Typ proměnné bude BOOL a její jméno můžeme zadat jako m_bLearn. Můžete ji vytvořit jako soukromou proměnnou. Po potvrzení by se vám měla objevit mezi členskými proměnnými.
V konstruktoru dialogu si můžeme potvrdit nastavení nové členské proměnné na hodnotu FALSE (klikněte pravým tlačítkem na konstruktor a zvolte Go to Definition a na konec funkce přidejte řádek:
       m_bLearn = FALSE;
).
Nyní pomocí ClassWizard doplníme obsluhu dvou zpráv, které pro zprovoznění tlačítka "Learn" využijeme.
V editoru dialogu klikneme pravým tlačítkem na "Learn" a zvolíme ClassWizard. Dvojklikem vyberte zprávu BN_CLICKED a potvrďte jméno funkce, která je nabídnuta - OnLearn - a pak potvrďte opět OK celý ClassWizard. Tím jsme přidali funkci pro obsluhu tlačítka. Zprávy časovače budou však chodit dialogu. Proto si ClassWizard vyvolejte při kliknutí pravým tlačítkem myši na ploše dialogu. Nyní je nabídka zpráv podstatně bohatší než u volby ze dvou poklepání u tlačítka. Vyberte ze zpráv WM_TIMER a přidejte funkci OnTimer.
Pokud zmáčknete tlačítko Edit Code ocitnete se na místě, kde můžete psát příkazy pro obsluhu zprávy WM_TIMER a kousek nad tím by měla být připravena kostra funkce OnLearn.
Doplňte kód, aby odpovídal následujícímu:
void CIRRmtCntDlg::OnLearn() 
{
CWnd *pWnd;

m_bLearn=TRUE;
pWnd=GetDlgItem(IDC_STATUS);
pWnd->SetWindowText(TEXT("Learning..."));
SetTimer(1,3000,NULL);
}

void CIRRmtCntDlg::OnTimer(UINT nIDEvent)
{
CWnd *pWnd;

m_bLearn=FALSE;
pWnd=GetDlgItem(IDC_STATUS);
pWnd->SetWindowText(TEXT("Ready..."));
KillTimer(1);

CDialog::OnTimer(nIDEvent);
}
Obě obsluhy jsou hodně podobné. Nejprve se nastaví odpovídající stav příznaku m_bLearn. Pak je přepsán stav hlášení statického prvku IDC_STATUS a na závěr je nastartována nebo ukončena činnost časovače.
Přeložíte-li program a vyzkoušíte-li jej, měl by se vám po zmáčknutí tlačítka "Learn" změnit na 3 sekundy nápis s hlášením stavu programu. Podobně jako na obrázku:

obr. 74 Po zmáčknutí tlačítka "Learn"

Co bychom si měli z této lekce zapamatovat?

  • ClassWizard nám nabídne a pomůže obsloužit vhodné zprávy pro určitou třídu.
  • Odpočívat se musí pravidelně...
 

Buď první, kdo ohodnotí tento článek.

Nový komentář

Přihlásit se
  Ještě nemáte vlastní web? Můžete si jej zdarma založit na Blog.cz.