Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Auto-Moto
Mobilní telefony
Notebooky  |  Tablety
Příslušenství
Wearables  |  Ostatní
Svět hardware  |  Digimanie  |   TV Freak

Priklady (samples) programovani pro PDA v C++

bkf1_ce4you (368)|30.8.2007 18:36
Zdravim vsechny,
dneska jsem se presvedcil na PDA/WM5 jak obrovsky rozdil je v rychlosti aplikace psane v C++ a aplikace psane v NetCF (konkretne C#) a rad bych do toho taky zkusil strcit frnak :) Nemuzu ale najit na netu zadne priklady pro C++ napr. nejake uplne jednoduche pro zacatek (formular + tlacitko "close") :( Muze nekdo prosim hodit nejakej odkaz?
Saman_ce4you (1451)|30.8.2007 20:52
U WM5 SDK je samplu dost..
bkf1_ce4you (368)|30.8.2007 21:25
:? ja jsem nasel jenom samply pro VB a CSharp :( muzes pls nahodit cestu k C++ samplum?

EDIT: aaa uz to mam dikec;)
SPM (182)|30.8.2007 22:19
Trochu OT - projevila se ti ta rychlost jenom ve spouštění aplikace nebo v jejim celkovym běhu? :)
bkf1_ce4you (368)|30.8.2007 23:02
oboji ;) ale tohle je hardcore programovani na to ja nemam cas takze to vidim na OpenNetCF ;) akorat jestli se dostanu k "vyrobe" moji dlouho planovane klavesky tak to proste budu muset prekousnout :/
phacker (49)|8.11.2007 07:56
OpenNET.CF je ale jen "nadstavba" .NET CF, takže si moc nepomůžeš. A SIP v .NET CF nenapíšeš. Tedy pokud to nebude samý PInvoke. :-)
bkf1_ce4you (368)|8.11.2007 10:18
TO PHACKER:
jj to uz vim ;) jinak rekl bych ze asi budes takovej ten hard-code programator (neboli programator co se muze plnym pravem titulovat "programator") tak bys mozna mohl vedet jak vyresit jednu vec co mi jeste chybi k vytvareni SIPu modifikaci samplu DvorakSip ( http://www.taptapsms.wz.cz/files/Dvoraksip_WM5.rar ) a sice to, jak zvetsit canvas SIPu. Zkousel jsem menit nastavenou velikost v hlavnim kodu i v hlavickach ale bez vysledku (porad je to 80x240 a ja potrebuju 100x240) :( Zkousel jsem vsechno mozny a nechapu kde takova blbost muze byt schovana :mad: Fakt to nechapu a kdybych ten kod nevidel tak by me ani ve snu nenapadlo ze takova blbost bude nekde schovana :/ Muzes mi s tim pls helpnout?
RStein (2012)|8.11.2007 11:09
Tak jsem se do kodu v rychosti dival - mam pocit, ze GetSipOnfo velikost vzdy nezmeni (ze jde ze strany programu je o doporuceni).

Zkousel jste tento kod v metode Showing?

[CODE]

RECT defRect;
RECT rcClients;
IMINFO imInfo;

//Souradnice si zvolte podle sebe
GetWindowRect(hwnd, &rcClients);
defRect.left=rcClients.left;
defRect.top=rcClients.bottom - BITMAP_HEIGHT
defRect.right=rcClients.left+ BITMAP_WIDTH;
defRect.bottom=rcClients.bottom;
imInfo.rcSipRect=defRect;
g_pIMCallback->SetImInfo(&iminfo);
[/CODE]

BTW: Neverte tomu, ze dobry programator se pozna podle toho, ze programuje v C++ - potkal jsem prilis mnoho "prasaku", kteri v C++ psali naprosto zversky kod s tunou chyb a tvrdili, kolik let maji praxe. Programator, ktery v C++ programuje dele, a nezna treba pri pouzivani kritickych sekci idiom RAII je mnohem horsi nestesti, nez programator v C# nebo Jave, kteremu na stribrnem podnose prinese samotny jazyk podporu pro RAII.
bkf1_ce4you (368)|8.11.2007 15:19
Po kosmeticke uprave kodu v metode Showing na
[CODE] RECT defRect;
RECT rcClients;
IMINFO imInfo;

//Souradnice si zvolte podle sebe
GetWindowRect(g_hwndMain, &rcClients);
defRect.left=rcClients.left;
defRect.top=rcClients.bottom - BITMAP_HEIGHT;
defRect.right=rcClients.left + BITMAP_WIDTH;
defRect.bottom=rcClients.bottom;
imInfo.rcSipRect=defRect;
g_pIMCallback->SetImInfo(&imInfo);

return NOERROR;[/CODE]

se mi zobrazuje tohle:


Zkousel jsem si s tim pohrat, ale bez vysledku (SIP byl vzdycky vsude mozne jenom ne dole a kdyz byl dole tak mel na vysku zase 80pix a ne 100pix jak jsem nove nastavil). Nevite co s tim?
RStein (2012)|8.11.2007 15:46
Podival jsem do sveho projektu (neverejneho) a tady mate upravu, ktera u me urcite funguje (kod mam ale jeste podstatne slozitejsi, takze doufam, ze tohle jsou vsechny potrebne upravy a spravne pojmenovane promenne).

Muzete predat i handly na Bitmapy. A byt vami, podivam Vam se, jestli vam z toho puvodniho prikladu nevadi makro SCALEY...


[CODE]
RECT defRect;
RECT rcClients;
IMINFO imInfo;


RECT defRect;
RECT rcClients;
IMINFO imInfo;

//Souradnice si zvolte podle sebe
GetWindowRect(g_hwndMain, &rcClients);
defRect.left=rcClients.left;
defRect.top=rcClients.bottom - BITMAP_HEIGHT;
defRect.right=rcClients.left + BITMAP_WIDTH;
defRect.bottom=rcClients.bottom;
imInfo.rcSipRect=defRect;
imInfo.cbSize=sizeof(IMINFO);
imInfo.fdwFlags = SIPF_DOCKED | SIPF_ON;

g_pIMCallback->SetImInfo(&imInfo);

MoveWindow(g_hwndMain, 0, 0, defRect.right - defRect.left, defRect.bottom -defRect.top, false);

return NOERROR;


[/CODE]
bkf1_ce4you (368)|8.11.2007 20:21
bohuzel porad to zlobi... tedka se uz zobrazi jen "pruhledne" okno a pak se kousne cela SIP funkce ve WM5 :( mohl byste prosim az budete mit chvilku zkusit implementovat ten vas kod do tohodle zjednoduseneho samplu?:
http://www.taptapsms.wz.cz/files/Dvoraksip_test.rar
Hned uvidite co to dela (myslim to "pruhledne" okno) a urcite budete vedet jak z toho ven ;) Ja se s tim patlam skoro cely den zkousim vsechno mozny a porad nic... nejbliz jsem byl zatim s timhle vasim kodem:
[CODE] RECT defRect;
RECT rcClients;
IMINFO imInfo;

//Souradnice si zvolte podle sebe
GetWindowRect(g_hwndMain, &rcClients);
defRect.left=rcClients.left;
defRect.top=rcClients.bottom - BITMAP_HEIGHT;
defRect.right=rcClients.left + BITMAP_WIDTH;
defRect.bottom=rcClients.bottom;
imInfo.rcSipRect=defRect;
g_pIMCallback->SetImInfo(&imInfo);

return NOERROR;[/CODE]
RStein (2012)|8.11.2007 20:29
Co se stane, kdyz v naposledy zaslanem kodu zakomentujete radek MoveWindow?
RStein (2012)|8.11.2007 20:40
A naplnte opravdu kompletne celou strukturu - vcetne handlu na Bitmapy atd (to same co delate v GetSipInfo).
Jestlize budete mit stale problem se sekanim (asi nekonencou rekurzi) aplikace, dejte pouze tento flag imInfo.fdwFlags = SIPF_DOCKED.
RStein (2012)|8.11.2007 20:58
A jeste jeden pokus:
Odstrante vsechno, co jsme spolecne dali do metody Showing.

A reknete mi, co se stane, kdyz ten vas priklad (resp. metodu GetSipInfo) rozsirite o volani
[CODE]
SendMessage (m_hwndMain, MYMSG_METHCALL, MSGCODE_GETINFO, (LPARAM) pimi);
[/CODE]

A pridejte si do h souboru tyto deklarace
[CODE]

#define MYMSG_METHCALL (WM_USER+100)
#define MSGCODE_GETINFO 1
[/CODE]
bkf1_ce4you (368)|8.11.2007 22:49
mno tak po vyzkouseni techto pokusu se zmenilo akorat to, ze SIP funkce se uplne nekousne a lze otevrit nabidku dalsich klavesnic ktere se ale neprepnou a uz se nezobrazuje "pruhledne" okno a misto nej je tam zakously otisk predchozi klavesnice... to jsem teda necekal ze to bude takovy problem vyporadat se s velikosti resp. vyskou canvasu SIPu :) :dead:
RStein (2012)|8.11.2007 22:58
Uprimne netusim, co Vam tam muze tak haprovat.
A zkousel jste vsechny varianty zvlast? Zkousite to v PDAnebo jen v emulatoru? Zkusil jste si vypsat do souborunejake debug hlasky? Abyste vedel, jake funkce jsou volany a v jakem poradi a kdy se nektera volani zacykli?
Na starsich Windows CE, pro ktere jsem SIP psal, tyhle problemy fakt neznam...
bkf1_ce4you (368)|8.11.2007 23:14
Mno zkousel jsem to jen v emulatoru co je s WM5 SDK... jinak pokud vim vetsina kodu co byly na starsi WinCE tak na WinCE 5 nefungovala - cetl jsem nejaky diskuze kde byly popsany zmeny ale tak moc jsem tomu nerozumnel...
RStein (2012)|8.11.2007 23:31
Emulator je obcas na tyto systemove hratky nespolehlivy.
O zmenach vim, proto jsem upravoval kod do poskytnuteho prikladu.
Pokud me nenapadne nic dalsiho, zkusim upravit a prepsat ten priklad. Ale pocitejte s tim az nekdy pristi vikend... po 15.11.
bkf1_ce4you (368)|8.11.2007 23:39
mno jestli budete mit cas tak by to bylo fajn zkusit to primo na tom prikladu ;) zatim zkusim MSDN forum treba nekdo z tamnich bude vedet...
Tak zatim diky moc za pomoc a dobrou noc :)
Saman_ce4you (1451)|9.11.2007 12:33
Ty svoje okno vytvaris jako child hlavniho SIP okna. Pokud to je maly, tak se muzes po...t, ale svoje nezvetsis. Musis zvetsit toho parenta. Takze v metode CInputMethod::Select:
[CODE]RECT rcSip;
GetWindowRect(hwndSip, &rcSip);
int hdiff = BITMAP_HEIGHT-(rcSip.bottom-rcSip.top);
MoveWindow(hwndSip, rcSip.left, rcSip.top-hdiff, BITMAP_WIDTH, BITMAP_HEIGHT, FALSE);
g_hwndMain = CreateWindow(g_ptszClassName,TEXT(""),WS_CHILD,0,0,BITMAP_WIDTH,BITMAP_HEIGHT,hwndSip,(HMENU)NULL,g_hInstDll,NULL );[/CODE]
RStein (2012)|9.11.2007 12:43
Saman: Tak to me nenapadlo, ze se snazi bkf1 narvat vsechno do maleho okna, kdyz na zacatku psal, ze vsechny moznosti, jak tradicne okno zvetsit, zkousel :)
no jo no, pod svicnem byva nejvetsi tma :)
Saman_ce4you (1451)|9.11.2007 13:09
No, mozna to neni nejcistsi reseni, veci kolem SIP moc neznam, ale okynka jo ;)
bkf1_ce4you (368)|9.11.2007 18:01
TO SAMAN:
Dikec funguje to ;) Fakt dik moc tohle je reseni myho problemu ;)

TO RSTEIN:
Mno ja zkousel vsechny moznosti, ktery mi davaji smysl + to co jste mi radil i kdyz je dost mozny ze jsem vase rady spatne pouzil... jako rikam jsem takovej ten hloupej Pascalista :D takze potrebuju vedet co presne kam hodit... vlastni hlavou vymyslim vetsinou jenom takovy ty z vaseho pohledu jednoduchy konstrukce typu IF...THEN atd. Kazdopadne vam dekuji moc za rady ;)
bkf1_ce4you (368)|14.11.2007 11:12
Jeste mam jeden problem ktery me celkem zaskocil. Ten sample DvorakSip nezvlada psani ceskych znaku jako ěščřž atd. Po stisknuti tlacitka ke kteremu je prirazen takovy znak se nic nenapise (zadny znak). Zkousel jsem najit nejaky zpusob jak to vlozit treba ze bych misto konkretniho znaku napsal jeho kod treba u00e1 ale nefunguje :/ Nevite prosim nekdo jak z toho ven? Asi se znaky unicode pisou v jinem tvaru ne? Tusim ze v CSharpu staci napsat jen treba u00e1 a hned to vyhodi odpovidajici znak...

EDIT: tak jsem si nasel ze unicode znaky se pisou v takovym tvaru: '\u00E1'
ale stejne to nefunguje - zadny znak se nenapise :(

Nenapada nikoho aspon v ktere casti kodu bych mel hledat problem? Prosim aspon zkuste nekdo neco nahodit treba na to prijdu sam ;) Zkousel jsem to treba vyresit v casti
[CODE]typedef struct {
BYTE bVk;
UINT wcUnshift;
UINT wcShift;
UINT nCtrl;
DWORD fdwFlags;
int nLeft;
} KEYENTRY;[/CODE]
ale bez uspechu :(

Jinak sample je na http://www.taptapsms.wz.cz/files/Dvoraksip_test.rar
RStein (2012)|30.11.2007 17:36
Jenom pro uzavreni tematu a pro osttani - jak jsme se shodli skolegou BKF1, problem byl pouze v zadavani char misto WCHAR.