Today Plugin w C++ how to

  • 26 Odpowiedzi
  • 8874 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline heath

  • 36
Today Plugin w C++ how to
« dnia: 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...

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Today Plugin w C++ how to
« Odpowiedź #1 dnia: Sierpień 30, 2009, 19:47:49 »
Masz przykładowo cały rozdział w "Programming Microsoft Windows CE / Douglas Boling.--2nd ed." na temat plugin-ów do today

*

Offline heath

  • 36
Odp: Today Plugin w C++ how to
« Odpowiedź #2 dnia: Sierpień 31, 2009, 00:43:29 »
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

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Today Plugin w C++ how to
« Odpowiedź #3 dnia: Sierpień 31, 2009, 08:29:00 »
Z tymi forami dla programistów nie jest u nas najlepiej niestety :( Większość niemal martwe ...

*

Offline tplewa

  • ****
  • 688
  • Płeć: Mężczyzna
  • Sprzęt: HTC Touch HD
Odp: Today Plugin w C++ how to
« Odpowiedź #4 dnia: Sierpień 31, 2009, 11:47:32 »
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...



"Two things are infinite: the universe and human stupidity; and I'm not sure about the universe."

*

Offline utak3r

  • Ekspert WM
  • *****
  • 1516
  • Płeć: Mężczyzna
    • Wirtualne Zacisze utak3ra
  • Sprzęt: Samsung Ace, Raphael, Hermes, Universal i inne
Odp: Today Plugin w C++ how to
« Odpowiedź #5 dnia: Sierpień 31, 2009, 19:30:23 »
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  :-|

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Today Plugin w C++ how to
« Odpowiedź #6 dnia: Sierpień 31, 2009, 19:38:01 »
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 .

*

Offline tplewa

  • ****
  • 688
  • Płeć: Mężczyzna
  • Sprzęt: HTC Touch HD
Odp: Today Plugin w C++ how to
« Odpowiedź #7 dnia: Sierpień 31, 2009, 21:43:50 »
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...


"Two things are infinite: the universe and human stupidity; and I'm not sure about the universe."

*

Offline utak3r

  • Ekspert WM
  • *****
  • 1516
  • Płeć: Mężczyzna
    • Wirtualne Zacisze utak3ra
  • Sprzęt: Samsung Ace, Raphael, Hermes, Universal i inne
Odp: Today Plugin w C++ how to
« Odpowiedź #8 dnia: Sierpień 31, 2009, 22:27:03 »
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....

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Today Plugin w C++ how to
« Odpowiedź #9 dnia: Wrzesień 01, 2009, 07:59:58 »
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.

*

Offline utak3r

  • Ekspert WM
  • *****
  • 1516
  • Płeć: Mężczyzna
    • Wirtualne Zacisze utak3ra
  • Sprzęt: Samsung Ace, Raphael, Hermes, Universal i inne
Odp: Today Plugin w C++ how to
« Odpowiedź #10 dnia: Wrzesień 01, 2009, 08:59:28 »
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 :)

*

Offline tplewa

  • ****
  • 688
  • Płeć: Mężczyzna
  • Sprzęt: HTC Touch HD
Odp: Today Plugin w C++ how to
« Odpowiedź #11 dnia: Wrzesień 01, 2009, 10:23:33 »
Cytuj
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...


"Two things are infinite: the universe and human stupidity; and I'm not sure about the universe."

*

Offline heath

  • 36
Odp: Today Plugin w C++ how to
« Odpowiedź #12 dnia: Wrzesień 01, 2009, 14:10:35 »
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.

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Today Plugin w C++ how to
« Odpowiedź #13 dnia: Wrzesień 01, 2009, 15:17:06 »
Cytuj
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 :)

*

Offline heath

  • 36
Odp: Today Plugin w C++ how to
« Odpowiedź #14 dnia: Wrzesień 03, 2009, 13:24:12 »
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
« Ostatnia zmiana: Wrzesień 03, 2009, 15:46:26 wysłana przez heath »

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Today Plugin w C++ how to
« Odpowiedź #15 dnia: Wrzesień 03, 2009, 19:53:58 »
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...

*

Offline utak3r

  • Ekspert WM
  • *****
  • 1516
  • Płeć: Mężczyzna
    • Wirtualne Zacisze utak3ra
  • Sprzęt: Samsung Ace, Raphael, Hermes, Universal i inne
Odp: Today Plugin w C++ how to
« Odpowiedź #16 dnia: Wrzesień 03, 2009, 19:55:13 »
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.

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Today Plugin w C++ how to
« Odpowiedź #17 dnia: Wrzesień 03, 2009, 20:03:57 »
Które pole TODAYLISTITEM to ta "wysokość"?
Może rozpiszemy ten protokół wg planu i sukcesywnie uzupełnimy szczegóły. Zagadnienie jest pożyteczne...

*

Offline heath

  • 36
Odp: Today Plugin w C++ how to
« Odpowiedź #18 dnia: Wrzesień 03, 2009, 22:52:25 »
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.

*

Offline heath

  • 36
Odp: Today Plugin w C++ how to
« Odpowiedź #19 dnia: Wrzesień 04, 2009, 14:12:32 »
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:)):


« Ostatnia zmiana: Wrzesień 04, 2009, 14:38:01 wysłana przez heath »

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Today Plugin w C++ how to
« Odpowiedź #20 dnia: Wrzesień 04, 2009, 18:59:44 »
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.

*

Offline heath

  • 36
Odp: Today Plugin w C++ how to
« Odpowiedź #21 dnia: Wrzesień 04, 2009, 22:08:35 »
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.

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Today Plugin w C++ how to
« Odpowiedź #22 dnia: Wrzesień 04, 2009, 22:17:05 »
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 )

*

Offline utak3r

  • Ekspert WM
  • *****
  • 1516
  • Płeć: Mężczyzna
    • Wirtualne Zacisze utak3ra
  • Sprzęt: Samsung Ace, Raphael, Hermes, Universal i inne
Odp: Today Plugin w C++ how to
« Odpowiedź #23 dnia: Wrzesień 04, 2009, 23:13:50 »
Co do zmiany położenia: obadaj sobie message WM_SETTINGCHANGE z wParam == SETTINGCHANGE_RESET.

*

Offline heath

  • 36
Odp: Today Plugin w C++ how to
« Odpowiedź #24 dnia: Wrzesień 05, 2009, 01:52:11 »
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

*

Offline tplewa

  • ****
  • 688
  • Płeć: Mężczyzna
  • Sprzęt: HTC Touch HD
Odp: Today Plugin w C++ how to
« Odpowiedź #25 dnia: Wrzesień 05, 2009, 03:48:24 »

 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 :)
« Ostatnia zmiana: Wrzesień 05, 2009, 03:50:03 wysłana przez tplewa »
"Two things are infinite: the universe and human stupidity; and I'm not sure about the universe."

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Today Plugin w C++ how to
« Odpowiedź #26 dnia: Wrzesień 05, 2009, 08:40:51 »
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ć. :)