Article View: pl.comp.lang.asm
Article #606Re: win32asm - DrawItem
From: 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
Technical Details
Message-ID:
<1157404454.802342.243980@b28g2000cwb.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.nask.pl!news.nask.org.pl!news.germany.com!postnews.google.com!b28g2000cwb.googlegroups.com!not-for-mailReferences:
<edh28l$ojd$1@inews.gazeta.pl> <1157384524.436843.232760@b28g2000cwb.googlegroups.com> <edhu3j$o7b$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.nask.pl!news.nask.org.pl!news.germany.com!postnews.google.com!b28g2000cwb.googlegroups.com!not-for-mail From: "Matuzalem" <codemaster_@op.pl> Newsgroups: pl.comp.lang.asm Subject: Re: win32asm - DrawItem Date: 4 Sep 2006 14:14:14 -0700 Organization: http://groups.google.com Lines: 167 Message-ID: <1157404454.802342.243980@b28g2000cwb.googlegroups.com> References: <edh28l$ojd$1@inews.gazeta.pl> <1157384524.436843.232760@b28g2000cwb.googlegroups.com> <edhu3j$o7b$1@inews.gazeta.pl> NNTP-Posting-Host: 212.244.115.33 Mime-Version: 1.0 X-Trace: posting.google.com 1157404458 26257 127.0.0.1 (4 Sep 2006 21:14:18 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Mon, 4 Sep 2006 21:14:18 +0000 (UTC) In-Reply-To: <edhu3j$o7b$1@inews.gazeta.pl> User-Agent: G2/0.2 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6,gzip(gfe),gzip(gfe) Complaints-To: groups-abuse@google.com Injection-Info: b28g2000cwb.googlegroups.com; posting-host=212.244.115.33; posting-account=HFFdEQ0AAACI08bdAnMScVqwVEj2ucOg Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit