Thread View: pl.comp.lang.asm
4 messages
4 total messages
Started by Kicer
Mon, 04 Sep 2006 11:22
win32asm - DrawItem
Author: Kicer
Date: Mon, 04 Sep 2006 11:22
Date: Mon, 04 Sep 2006 11:22
19 lines
1510 bytes
1510 bytes
Witam Zaczołem się bawic win32asm. Na początek chciałem stworzyć liste z możliwościa wyświetlania w niej zdjęć i ich opisu. W tym celu stworzyłem sobie kontorlke LISTBOX ze tyle LBS_OWNERDRAWVARIABLE. i teraz nie wiem jak cos do niej dodać. Czytam na stronie msdn library ze nalezy stworzyc odpowiednia strukurę a nastepnei uzyc metody drawitem. Problem w tym ze nie wiem jak to zrobić pod asemblerem. Chaiłem znaleźć jakis message który mogłbym wysłać do kontrolki (tak jak je zwykła "tekstowa" listą - msg LB_ADDSTRING) ale takowej nie znalazłem. dzięki z góry za odpowiedzi pozdrawiam -- Kicer, gg: 3729519, mail: Kicer86 na gmail kropka com - Stirlitz co jest lepsze radio czy gazeta? - zapytał podejrzliwie Müller. - Gazeta, w radio nie zawiniesz śledzia - odparł spokojnie Stirlitz.
Re: win32asm - DrawItem
Author: Matuzalem
Date: Mon, 04 Sep 2006 15:42
Date: Mon, 04 Sep 2006 15:42
49 lines
2895 bytes
2895 bytes
Kicer napisał(a): > Witam > > Zaczołem się bawic win32asm. > Na początek chciałem stworzyć liste z możliwościa wyświetlania w niej zdjęć > i ich opisu. > W tym celu stworzyłem sobie kontorlke LISTBOX ze tyle LBS_OWNERDRAWVARIABLE. > i teraz nie wiem jak cos do niej dodać. Czytam na stronie msdn library ze > nalezy stworzyc odpowiednia strukurę a nastepnei uzyc metody drawitem. > Problem w tym ze nie wiem jak to zrobić pod asemblerem. Chaiłem znaleźć > jakis message który mogłbym wysłać do kontrolki (tak jak je zwykła > "tekstowa" listą - msg LB_ADDSTRING) ale takowej nie znalazłem. > > dzięki z góry za odpowiedzi > pozdrawiam > -- > Kicer, gg: 3729519, mail: Kicer86 na gmail kropka com > > - Stirlitz co jest lepsze radio czy gazeta? - zapytał podejrzliwie Müller. > - Gazeta, w radio nie zawiniesz śledzia - odparł spokojnie Stirlitz. Pierwsza sprawa, jeśli programujesz w WinAPI np. używając C++, to myśl w ten sam sposób organizując kod, a w jego pisaniu, optymalizacji, i działaniu jak pod asm. tworzą kontrolke np. przy użyciu C++ (PureAPI): CreateWindowsEx(...); w ASM, zapis jest prawie identyczny w zależności od tego jakiego kompilator używasz, ale niezależnie od tego i tak argumenty są położone na stos. PROTO CreateWindows/Ex/A/W ... push ... push ... call/invoke CreateWindows/Ex/A/W ... Ale to pewnie już wiesz :) więc przejdźmy do twojego pytania. Co masz na myśli: "Na początek chciałem stworzyć liste z możliwościa wyświetlania w niej zdjęć i ich opisu."? Chodzi Ci o dodanie zdjęć itd. tak jak tekstu? Bo jeśli tak to pewnie masz na myśli strukture 'DRAWITEMSTRUCT'. Osobiście do w/w problemu poleciłbym ListView. Pozdrawiam
Re: win32asm - DrawItem
Author: Kicer
Date: Mon, 04 Sep 2006 19:17
Date: Mon, 04 Sep 2006 19:17
56 lines
2797 bytes
2797 bytes
Matuzalem wrote: > > Pierwsza sprawa, jeśli programujesz w WinAPI np. używając C++, to > myśl w ten sam sposób organizując kod, a w jego pisaniu, > optymalizacji, i działaniu jak pod asm. > > tworzą kontrolke np. przy użyciu C++ (PureAPI): > > CreateWindowsEx(...); > > w ASM, zapis jest prawie identyczny w zależności od tego jakiego > kompilator używasz, ale niezależnie od tego i tak argumenty są > położone na stos. > > PROTO CreateWindows/Ex/A/W ... > > push ... > push ... > call/invoke CreateWindows/Ex/A/W ... > > Ale to pewnie już wiesz :) więc przejdźmy do twojego pytania. w programu pod windows jestem totalnie zielony/szary, to jest mój pierwszy program ;) (dlatego prosze o wyrozumialosc :) ) > Co masz na myśli: "Na początek chciałem stworzyć liste z > możliwościa wyświetlania w niej zdjęć i ich opisu."? > Chodzi Ci o dodanie zdjęć itd. tak jak tekstu? Chciałem zrobić listę zdjęć (miniaturki) z ich opisem, tak jak to wygląda np w gg (słoneczko + opis ;P ) tyle ze obrazki miałyby być większe > Bo jeśli tak to pewnie masz na myśli strukture 'DRAWITEMSTRUCT'. > Osobiście do w/w problemu poleciłbym ListView. wybierajac ListBoxa zasugerowałem sie tym ze własnie w gg taki jest uzyty (wybadałem winspectorem) i zerżnołem czesc styli tak zeby mozna było rysowac :) odnoścnie podanej przez Ciebie struktury: looknołem do msdn, stworzyłem takową ale nie wiem jak ja dodać do listy oglądałem tez na iczelionie, ale tam znalazłem tylko treeview. Z rana poszukam czegoś o ListView. Prosiłbym też bardzo o namiar na przykładowy kodzik z czyms podobnym (zawsze można podchwycic jakis nowy pomysł :) ). Trudno było mi cokolwiek wygooglac na ten temat pod asma. pozdrawiam -- Kicer, gg: 3729519, mail: Kicer86 na gmail kropka com - Stirlitz co jest lepsze radio czy gazeta? - zapytał podejrzliwie Müller. - Gazeta, w radio nie zawiniesz śledzia - odparł spokojnie Stirlitz.
Re: win32asm - DrawItem
Author: Matuzalem
Date: Mon, 04 Sep 2006 21:14
Date: Mon, 04 Sep 2006 21:14
156 lines
5961 bytes
5961 bytes
Kicer napisał(a):
> w programu pod windows jestem totalnie zielony/szary, to jest mój pierwszy
> program ;) (dlatego prosze o wyrozumialosc :) )
to chwilowe gwarantuje Ci :)
minie może tydzień, a zobaczysz, że to proste....
>
> > Co masz na myśli: "Na początek chciałem stworzyć liste z
> > możliwościa wyświetlania w niej zdjęć i ich opisu."?
> > Chodzi Ci o dodanie zdjęć itd. tak jak tekstu?
>
> wybierajac ListBoxa zasugerowałem sie tym ze własnie w gg taki jest uzyty
> (wybadałem winspectorem) i zerżnołem czesc styli tak zeby mozna było
> rysowac :)
Mi WinSpector (Spy++ również) pokazał, że to 'STATIC' i powiem Ci
szczerze, że raczej bym stawiał na 'STATIC' to jest ich kontrolka, z
tego co wiem ListBox nie oferuje takich usług jakie są "widoczne" w
GG (dla ListView również byłoby trudno takie osiągnąć, ale dużo
łatwiej {a gdy weźmiemy pod uwagę wersje 6.0 to jeszcze łatwiej
będzie coś takiego zrobić, tyle, że to ma wade, nie działa w stecz
i na starszych Windows-ach może już tak nie wyglądać})
> Z rana poszukam czegoś o ListView.
MSDN:
- to ogulnie dla Windows-owych kontrolek ->
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/wincontrols.asp
- a to dla ListView ->
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/reflist.asp
> odnoścnie podanej przez Ciebie struktury: looknołem do msdn, stworzyłem
> takową ale nie wiem jak ja dodać do listy
Za pomocą 'WM_DRAWITEM'. W asm tak by to wyglądało (TASM/MASM):
;
-----------------------------------------------------------------------------------------------
.586P
.model flat, stdcall ; stdcall (lub jak kto woli)
; prototyp procedór
IFDEF MASM
extern SendMessage@16:near ;na marginesie: MS lubi tworzyć nowe typy
:P :)
includelib kernel32.lib
ELSE
extern SendMessage:near
SendMessage@16 = SendMessage
includelib import32.lib
ENDIF
; stałe
WM_DRAWITEM equ 2Bh
ODT_LISTBOX equ 2
; teraz struktury
RECT struc
left DWORD ?
top DWORD ?
right DWORD ?
bottom DWORD ?
RECT ends
DRAWITEMSTRUCT struc ; struct
CtlType DWORD ?
CtlID DWORD ?
itemID DWORD ?
itemAction DWORD ?
itemState DWORD ?
hwndItem DWORD ?
hDC DWORD ?
rcItem RECT <>
itemData DWORD ?
DRAWITEMSTRUCT ends
_DATA segment
hListBox DD ?
dis DRAWITEMSTRUCT <0>
_DATA ends
_TEXT segment
start:
; tutaj inicializacja programu: GetModuleHandle itd.
; teraz iniciujemy strukture:
mov dis.CtlType, ODT_LISTBOX
; itd.
; no i wywołanie SendMessage (aby pod TASM działało bez invoke;
; jak z invoke to jeszcze PROTO)
; SendMessage PROTO :DWORD, :DWORD, :DWORD, :DWORD
; od tyłu jeśli ze stosem...
push offset dis
push 0 ; tu do MSDN odsyłam
push WM_DRAWITEM
push hListBox ; nie zapomnij wcześniej wypełnić !
call SendMessage@16 ; '@16' aby pod MASM poszło
; albo: call SendMessage@16, hListBox, WM_DRAWITEM, 0, offset dis
; z invoke tak samo bez '@16'
; ...
; no i na końcu ExitProcess, 0
_TEXT ends
end start
;
-----------------------------------------------------------------------------------------------
Mam nadzieje, że zadziała (pisałem na poczekaniu :] )
Kompilacja:
MASM:
ml /c /coff /DMASM lb.asm ;DMASM dla makra (odsyłam do ml /?)
link /subsytem:windows lb.obj
TASM:
tasm32 /ml lb.asm
link32 /aa lb.obj
> Prosiłbym też bardzo o namiar na przykładowy kodzik z czyms podobnym (zawsze
> można podchwycic jakis nowy pomysł :) ).
W pakiecie MASM masz sporo przykładów z róznymi kontrolkami i w
ogólności z Windows-em (http://www.masm32.com/masmdl.htm)
Dla TASM w pakiecie nie ma zbyt dużo :) (dla api w ogule nie ma chyba
:P, ale w necie wpisz w google: 'TASM WinAPI; PureAPI' to
znajdziesz...)
> Trudno było mi cokolwiek wygooglac na ten temat pod asma.
Powiem Ci, że na pierwszy rzut oka, nie ma zbyt wiele przykładów dla
asm pod winapi, ale jak dłużej poszukasz to znajdziesz i to nie
mało.
Nie wiem, czy to dobry pomysł i czy Ci go proponować, ale jeśli
znasz np. C++ to najpierw postaraj się zastosować WinAPI z pomocą
tego języka, czemu?
Chodzi mi o sposób inicializacji i obycia się w winapi, nie muszą to
być nie wiadomo jakie wiadomości, poprstu podstawy, aby zrozumieć co
dana funkcja/struktura/zmienna ma za zadanie, potem możesz śmiało
przesiąść się do WinAPI pod asm (fajnie było by też znać asm
[przede wszystkim], ale myśle, że go znasz)
Miłej zabawy :)
Pozdrawiam
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads