Kurz6 - Kapitola4

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

8.4 Dokončení přípravy programu

Třetím krokem dokončíme přípravu programu tak, abychom se příště již mohli věnovat práci s databází.
K pohodlnému ovládání by bylo vhodné, aby uživatel nemusel vůbec používat stylus. Stačilo by používat kurzorové klávesy tak, aby bylo možné najít požadovanou informaci pouze "jednou rukou", ve které držíte PDA. Protože šipky vpravo a vlevo by měly přepínat jednotlivé karty a šipky nahoru a dolů zase výběr v položkách ListView, je potřeba zmáčknutí klávesy distribuovat do správného okna.
ClassWizard nám pomůže ve třídě CPhoNumbsDlg najít členskou funkci PreTranslateMessage. Vytvoříme její novou verzi, ve které budeme "krást" zprávy o zmáčknutí šipkových kláves a posílat je do příslušného okna. Doplňte novou verzi:
BOOL CPhoNumbsDlg::PreTranslateMessage(MSG* pMsg) 
{
CWnd *pWnd;

if(pMsg->message == WM_KEYDOWN) {
if((pMsg->wParam == VK_UP) || (pMsg->wParam == VK_DOWN)) {
pWnd=GetDlgItem(IDC_LIST1);
GotoDlgCtrl(pWnd);
pWnd->SendNotifyMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
return TRUE;
}
if((pMsg->wParam == VK_LEFT) || (pMsg->wParam == VK_RIGHT)) {
pWnd=GetDlgItem(IDC_TAB1);
GotoDlgCtrl(pWnd);
pWnd->SendNotifyMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
return TRUE;
}
}

return CDialog::PreTranslateMessage(pMsg);
}
Nyní můžete vyzkoušet (ať již na PDA nebo v emulátoru), že tlačítky lze procházet mezi všemi položkami v "databázi".
Závěrečný úkol v přípravě programu je přichystat dialog, pomocí něhož budeme editovat a vkládat položky do databáze.
Pro náš účel je dostatečné, když budeme mít 3 textové řetězce (jméno, příjmení a telefonní číslo) a každý řetězec bude maximálně 18 znaků dlouhý. Dále na dialogu budou 3 přepínací tlačítka pro volbu kategorie (aby bylo možné zvolit jednu ze 3 kategorií, do které číslo patří). Grafickou tvorbu a postup ponechávám na vás, protože jste to již asi zkusili v minulém kurzu (kapitola 7.3). Jako inspirace pro vzhled dialogu může posloužit:
obr. 89 Dialog pro úpravu položek
Pomocí ClassWizardu vytvořte pro tento dialog novou třídu. Abychom se sešli při dalším používání, doporučuji dodržet následující pokyny:
  1. Třída pro dialog se bude jmenovat CNewItem
  2. Do třídy budou vloženy členské proměnné:
    1. int m_Category
    2. CString m_Name
    3. CString m_Surname
    4. CString m_Phone
Řetězcové proměnné jsou svázané s jednotlivými EditBoxy. Pro jednotlivé přepínačové prvky jsem nachystal členské funkce, které po kliknutí nastaví příslušné číslo kategorie.
void CNewItem::OnRadio1() 
{
m_Category=1;
}

void CNewItem::OnRadio2()
{
m_Category=2;
}

void CNewItem::OnRadio3()
{
m_Category=0;
}
A aby byl nastaven výchozí stav na přepínačích, doplnil jsem funkci OnInitDialog (obsluha zprávy WM_INITDIALOG) a v ní tuto inicializaci.
BOOL CNewItem::OnInitDialog() 
{
CDialog::OnInitDialog();
CButton* pWnd;

m_Category=0;
pWnd=(CButton*)GetDlgItem(IDC_RADIO3); pWnd->SetCheck(1);

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
Pokud si vložíte hlavičkový soubor, můžete nový dialog pokusně otestovat např. v:
void CPhoNumbsDlg::OnEdit() 
{
CNewItem dlg;

dlg.m_Surname=_T("Prijmeni");
dlg.m_Name=_T("Jmeno");
dlg.m_Phone=_T("+420123456789");
if(dlg.DoModal() != IDOK) {
MessageBox(_T("Storno editace"));
return;
}
MessageBox(_T("O.K. editace"));
}
Kostra programu je připravená. Příště už konečně můžeme začít bádat nad databází.

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

  • Klávesnicové zprávy v programu můžeme přeposílat dceřiným oknům, která nemají fokus nastavený na sebe.
 

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.