PDAclub.pl - Forum użytkowników technologii mobilnych
Windows Mobile (Classic, Professional, Standard), Windows Phone 6.x oraz 7/8.x/10 => Oprogramowanie PPC => Dla programistów => Wątek zaczęty przez: heath w Sierpień 30, 2009, 19:39:14
-
Poszperalem troche i znalazlem przyklad jak zrobic today plugin w C++, w C# mi sie jeszcze nie udalo. Teraz mecze sie z narysowaniem obrazka z pliku PNG. Potem bede sie meczyl z dostepem do rejestru systemu, danych standardowego kalendarza oraz adresow... duzo roboty.
Macie moze jakies fajne, upozadkowane zrodlo informacji na temat programowania w C++ na WM 6+??? Strona www, ksiazka... cokolwiek...
-
Masz przykładowo cały rozdział w "Programming Microsoft Windows CE / Douglas Boling.--2nd ed." na temat plugin-ów do today
-
Lol wielkie dzieki! tego szukalem!
W wielu miejscach pytalem o tytul albo stronke ale nikt nie odpowiadal:(
wlasnie sciagam 3rd ed tej ksiazki z rapida
-
Z tymi forami dla programistów nie jest u nas najlepiej niestety :( Większość niemal martwe ...
-
Z tymi forami dla programistów nie jest u nas najlepiej niestety :( Większość niemal martwe ...
A to jeszcze nie tragedia bo i tak najczesciej konczy sie na tym ze znajdziemy to co potrzeba w MSDN lub na stronkach typu http://www.codeproject.com/ http://www.codeguru.com/ itp. :)
A jak cos znalazles jakies przyklady itp. to warto zamiescic link itp. bedzie dla innych osob jak beda chciali tez powalczyc z pluginami...
-
w C# mi sie jeszcze nie udalo
Jeśli mówiąc "C#" masz na myśli NETCF, to... się nie da. Możesz zrobić jedynie taki myk, że natywna wtyczka win32api jest wrapperem wywołującym zwykły program netcf.
Napisane: Sierpień 31, 2009, 19:29:32
dla innych osob jak beda chciali tez powalczyc z pluginami...
acha - nie korzystać z przykładu zawartego w MSDNie! Ma kilka poważnych wad konstrukcyjnych :-|
-
O co chodzi z tą "natywną wtyczką"? :shock:
Nie da się środowiska wykonawczego netcf załadować do przestrzeni adresowej danego procesu? To byłoby nierozsądne ze strony MS. Zwykle twórcy takich środowisk ( np dla języków skryptowych ) starają się właśnie żeby to było możliwe .
-
O co chodzi z tą "natywną wtyczką"? :shock:
Nie da się środowiska wykonawczego netcf załadować do przestrzeni adresowej danego procesu? To byłoby nierozsądne ze strony MS. Zwykle twórcy takich środowisk ( np dla języków skryptowych ) starają się właśnie żeby to było możliwe .
Generalnie ja staram sie unikac pisania w .NET jak cos ma szybko dzialac :) Wtyczek bym w tym nie pisal, ani jakis programow ktore maja sobie wisiec w tle. Na PC mozna to jakos strawic ale na PDA szkoda RAM-u i meczenia CPU... Lepiej tego typu pluginy pisac w WinAPI - jak dla mnie latwiej obsluguje sie komunikaty (tutaj masz odpowiedz po co np. warper), ale jak cos sie spierniczy to mamy zwieche calosci...
-
O co chodzi z tą "natywną wtyczką"? :shock:
o działającą pod win32api, czyli natywnie :mysli:
Po prostu nie da się podpiąć aplikacji dotnetowej pod system wtyczek (komunikaty systemowe!) i zarejestrować jej jako takiej.
Generalnie ja staram sie unikac pisania w .NET jak cos ma szybko dzialac :)
Generalizować też nie można, to przesąd.
Owszem, wysokiej optymalizacji kodu nie osiągniesz, ale większość "powolności" aplikacji dotnetowych wynika z tego, że piszą je ludzie, dla których to jest pierwszy język programowania i nie są nauczeni programować prawidłowo....
Jako plus należy zaliczyć tutaj bogatą bibliotekę, która sprawia, że mniej myślisz nad zakręconymi algorytmami i hackami - zwiększając ogromnie ryzyko wprowadzenia błędów do programu.
Oczywiście, aplikacji intensywnie korzystającej z mocy procka nie należy w tym pisać pod ppc, gdzie mocy tej brakuje....
-
O co chodzi z tą "natywną wtyczką"? :shock:
o działającą pod win32api, czyli natywnie :mysli:
Po prostu nie da się podpiąć aplikacji dotnetowej pod system wtyczek (komunikaty systemowe!) i zarejestrować jej jako takiej.
...
Ok to już rozumiem o co Ci chodziło z tą natywnością. :) Ale z tego co pamiętam, to w serwerze WWW MS-u można rzeźbić w net czyli środowisko wykonawcze net pod desktopowe windy można załadować do procesu. Jeśli to samo odnosiłoby się do netcf to napisanie wtyczki nienatywnej jest możliwe. Oczywiście mały kod w C/C++ przekierowujący komunikaty w obie strony byłby niezbędny ale wymagałby napisania tylko raz.
-
Oczywiście mały kod w C/C++ przekierowujący komunikaty w obie strony byłby niezbędny ale wymagałby napisania tylko raz.
Dokładnie to miałem na myśli pisząc o wrapperze :)
-
Ale z tego co pamiętam, to w serwerze WWW MS-u
Ale tutaj chodzi ci chyba o ASP .NET... Jesli chodzi o IIS-a to jeszcze mozna cos kombinowac z WSS i do tego sopbie pisac dodatki w .NET...
Z tym ze to troche inna bajka...
-
Heh wyrysowalem na ekranie pierwsze obrazki PNG z przezroczystym tlem:)
To czego mi zawsze w C++ brakowalo to dobra dokumentacja bibliotek... w Javie javadoc do api jest genialny.
-
Ale z tego co pamiętam, to w serwerze WWW MS-u
Ale tutaj chodzi ci chyba o ASP .NET... Jesli chodzi o IIS-a to jeszcze mozna cos kombinowac z WSS i do tego sopbie pisac dodatki w .NET...
Z tym ze to troche inna bajka...
Tak, o ASP mi chodziło, ale trzymajmy się tematu - chodziło mi globalnie o kwestię, że plugin można skrobnąć na siłę i w net-cie :)
-
W homescreen++ widzialem ze w konfigu jak sie poda nazwe today plugina to potem jest on potem wyswietlany, rozumiem ze zarzadza nim wtedy homescreen++. Znacie sposob zeby znajac nazwe pluginu mozna go bylo otworzyc w innym pluginie??? Taki plugin otwiera sie w moim pluginie jako okienko czy jak???
bede wdzieczny za pomoc.
EDIT:
Chyba znalazlem:
http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesnative/thread/4e8ef87c-fc3f-47d2-8174-3a524a04d394
bede musial to jeszcze zrozumiec:D
-
Raczej zamiast patrzeć na kod, zastanów się co musisz robić. Bo w książce masz to opisane, tylko musisz odwrócić role. Ten komunikat zapytujący o odświeżanie moim zdaniem powinieneś generować kiedy go twoja wtyczka "nadrzędna" dostanie...
-
Tak bez czytania tego, co przytoczyłeś, to musisz stworzyć okno, które będzie stanowiło canvas dla plugina i przechwytywać kominikaty przeznaczone dla niego i plugin będzie musiał je jakoś obsłużyć (typu zmiana rozmiaru okna, nawigacja dpadem, wybranie pozycji itp.).
Przy okazji: pamiętaj, że plugin powinien być zainicjowany z zerową wysokością! To jest cholernie ważne. Dopiero potem otrzymujesz sygnał o zmianie wysokości i to czynisz.
-
Które pole TODAYLISTITEM to ta "wysokość"?
Może rozpiszemy ten protokół wg planu i sukcesywnie uzupełnimy szczegóły. Zagadnienie jest pożyteczne...
-
hmm nie czytajac kodu nawet mnie sie wydawalo zeby robic to tak:
1. moj plugin otwiera i wczytuje do listy wszystkie dll-e z pluginami ktore opisalem w configu
2. moj plugin otrzymuje jakis komunikat ktory probuje przetworzyc ale jesli to nic dla niego to wywoluje funkcje obslugujaca wiadomosci z obecnie aktywnego pluginu przekazujac mu handlery itp przez co dllka moze sama sie narysowac. Jesli np odczytam w mojej dllce ze ktos wykonal gest ktory ja zaprogramowalem jako zmiana aktualnie wyswietlanego plugina to nie przekazuje wiadomosci dalej do aktywnej dllki tylko zmieniam wskaznik aktywnego pluginu na inny z plisty i kaze mu sie namalowac.
tylko nie wiem czy te handlery i inne parametry moga byc przekazane i odczytane w dllce... tzn czy adresy beda takie same w wywolywanej dllce.
Podejrzewam ze zanim zrozumiem jak to wszystko dziala to bede musial przecyzc ze 2 ksiazki o api na win CE. Tymczasem bede budowal troche w ciemno skladajac programy ze strzepow kodu ktory znajde:) potem bede je tu wrzucal zebyscie mogli mnie zbesztac.
-
Chce zeby plugin reagowal na obrot ekranu. oddziele koncowki baterii jako osobne obrazki ktore beda skalowane proporcjonalnie, Przezroczysty srodek bedzie skalowany nieproporcjonlnie tzn poszerzany w zaleznosci od szerokosci ekranu, srodek bedzie roszrzeszany proporcjonalnie do stanu baterii i szerokosci ekranu. dzieki temu powinienem miec ladna obsluge poziomego ekranu. Bateria bedzie reprezentowana przez klase ktorej atrybutmi beda wlasnie obrazki (mozna je podmieniac),stan baterii, polozenie xy lewego gornego rogu, wysokosc oraz szerokosc. Szerokosc bedzie zmianiana przy otrzymaniu wiadomosci o zmianie rozmiarow pluginu. Po wywolaniu na obiekcie tej klasy funkcji paint wyrysuje sie ona sama na ekranie.
Nie jestem tylko pewien gdzie powinienem umiescic zmiane stanu baterii. Mam funkcjie ktora odczytuje jej stan ale nie jestem pewien czy umiescic jej wywolanie w obsludze wiadomosci paint czy moze w osobnym watku ktory co 10 sekund bedzie sie budzil i ustawial stan baterii w obiekcie baterii, moze tez wywolywac przerysowanie pluginu.
Pierwsze screeny grafiki pluginu pokazujacego stan baterii(nie sa idealne bo tez ja grafikiem nie jestem:)):
(http://student.agh.edu.pl/~heath/mojaTransparentBatteryEmpty.png)
(http://student.agh.edu.pl/~heath/mojaTransparentBatteryFull.png)
(http://student.agh.edu.pl/~heath/mojaTransparentBatteryNiepelna.png)
-
Wydaj mi się, że today sam odpytuje okresowo wysyłając WM_TODAYCUSTOM_QUERYREFRESHCACHE Tak więc w odpowiedzi na tą wiadomość należałoby sprawdzać czy stan baterii nie uległ zmianie i zwracać odpowiednią wartość z funkcji okienkowej. Dodatkowo w statycznej zmiennej (może w obiekcie) można utrzymywać ostatni odczyt z baterii i wykorzystywać go podczas obsługi WM_PAINT.
-
tak jak opisalem wyzej te dane beda trzymane w obiekcie klasy baterii. chyba obiekt bedzie odpytywal system o poziom baterii przy wywolywaniu funkcji paint. Wyczytalem ze poziom baterii zczytywany jest ze sterownika do systemu co ok 5 min wiec czas ostatniego odpytania systemu o dane tez musze trzymac w obiekcie i updatowac stn bateri w obiekcie nie czesciej niz 5 min:) ale zamotalem.
Tak w WM_TODAYCUSTOM_QUERYREFRESHCACHE bede robil repaint jesli konieczny i sprawdzal czy sie nie zmienily wymiary.
-
Nie tak dawno się bawiłem ze sterownikiem od baterii i można sprawić żeby częściej aktualizował stan. Nawet co kilka ms dałem i mi telefonik coś dziwnie zwolnił :E Założenie, że to jest 5min lepiej od razu porzucić. Już lepiej sobie zegar odpalić ( wątek to za dużo jak na taki drobiazg ) z konfigurowalnym okresem wyzwalania. (wyzwalanie WM_TIMER mam na myśli )
-
Co do zmiany położenia: obadaj sobie message WM_SETTINGCHANGE z wParam == SETTINGCHANGE_RESET.
-
nie o to mi chodzilo z tym co 5 min. chodzi o to ze jak jest wiadomosc przy obsudze ktorej przemalowuje baterie to sprawdzam czy ostanie pobranie z sytemu bylo dawniej niz 5 min, jesli tak wywoluje funkcje systemowa i uaktualniam i zpisuje aktualny czas w zmiennej, czyli bez watkow.
nie wiedzialem ze sa timery w c++ na WM:) zaraz poczytam
-
nie wiedzialem ze sa timery w c++ na WM:) zaraz poczytam
he he a dlaczego mialo by nie byc :)
ot prosto odpalasz sobie SetTimer(hWnd,WM_TIMER, 1000, NULL); gdzie 1000 = 1s :)
i obslugujesz WM_TIMER standardowo czyli
switch (message)
{
...
case WM_CREATE:
case WM_PAINT:
case WM_TIMER:
...
}
PS
A ta bateria wyszla ci calkiem ladnie :)
-
Dodam, że WM_TIMER dostarcza id timera, tak więc można sobie kilka timerów na raz ustawić.
Mogę do nauki podstaw winapi polecić Książkę Petzolda, ostatnie wydanie najlepiej. Nie ma tam za bardzo o programowaniu systemowym, ale to obejmuje książka windows via C++ ( ang oryg. Windows via C/C++ Fifth Edition (December 2007) (with Christophe Nasarre) ) Czyli można sobie albo polską albo angielską czytać. :)