🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
4 messages
4 total messages Started by Kicer Mon, 04 Sep 2006 11:22
win32asm - DrawItem
#603
Author: Kicer
Date: Mon, 04 Sep 2006 11:22
19 lines
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
#604
Author: Matuzalem
Date: Mon, 04 Sep 2006 15:42
49 lines
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
#605
Author: Kicer
Date: Mon, 04 Sep 2006 19:17
56 lines
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
#606
Author: Matuzalem
Date: Mon, 04 Sep 2006 21:14
156 lines
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