Подскажите почему происходит такое:
Диалог показывается в первый (третий и далее в нечётные) раз с ListBox-ом, а во второй (четвёртый и далее в чётные) раз без ListBox-а. Вот процедура диалога:
proc Vozvrat_Dialog,hwnd,wmsg,wparam,lparam
enter
push ebx esi edi
cmp [wmsg],WM_DRAWITEM
je .wmdraw
cmp [wmsg],WM_COMMAND
je .wmcommand
cmp [wmsg],WM_INITDIALOG
je .init
cmp [wmsg],WM_RBUTTONDOWN
je .close
xor eax,eax
jmp .finish
.wmdraw:
mov ebx,[lparam]
cmp [Spis.dis.itemAction],ODA_DRAWENTIRE
je .drugie
jmp .finish
.drugie:
invoke CreateCompatibleDC,[Spis.dis.hDC]
mov [Spis.hMem],eax
invoke SelectObject,[Spis.hMem],[Spis.dis.itemData]
mov [Spis.oldDC],eax
mov eax,[Spis.dis.rcItem.right]
sub eax,[Spis.dis.rcItem.left]
mov ecx,[Spis.dis.rcItem.bottom]
sub ecx,[Spis.dis.rcItem.top]
invoke BitBlt,[Spis.dis.hDC],[Spis.dis.rcItem.left],[Spis.dis.rcItem.top],eax ,ecx,[Spis.hMem],1,1,SRCCOPY
invoke SendMessage,[Spis.dis.hwndItem],LB_GETTEXT,[Spis.dis.itemID],__Buf
invoke GetTextMetrics,[Spis.dis.hDC],Spis.tm
mov ecx,[Spis.dis.rcItem.bottom]
add ecx,[Spis.dis.rcItem.top]
sub ecx,[Spis.tm.tmHeight]
shr ecx,1
CountString __Buf
dec eax
invoke TextOut,[Spis.dis.hDC],20,ecx,__Buf,eax
invoke SelectObject,[Spis.hMem],[Spis.oldDC]
invoke DeleteDC,[Spis.hMem]
mov eax,1
jmp .finish
.init:
invoke CreateWindowEx,0,__class,0,\
WS_CHILD+WS_VISIBLE+LBS_OWNERDRAWFIXED+WS_BORDER+LBS_HASSTRINGS+LBS_NO TIFY+WS_VSCROLL+WS_HSCROLL,\
1,71,207,100,[hwnd],0,[hinstance],NULL
mov [Spis.hList],eax
invoke ShowWindow,[Spis.hList],SW_SHOW
addList service
jmp .processed
.wmcommand:
mov eax,[lparam]
cmp eax,[Spis.hList]
je .list
cmp [wparam],ID_CANCEL
je .close
cmp [wparam],ID_KAT
je .prinyat
jmp .finish
.list:
cmp [Spis.i],0
jne .nofinish
mov [Spis.i],1
jmp .finish
.nofinish:
invoke GetDC,[Spis.hList]
mov [Spis.hdc],eax
invoke SendMessage,[Spis.hList],LB_GETCARETINDEX,0,0
mov [Spis.item],eax
invoke SendMessage,[Spis.hList],LB_GETITEMRECT,eax,Spis.rcItem
invoke SendMessage,[Spis.hList],LB_GETTEXT,[Spis.item],__Buf
invoke CreateCompatibleDC,[Spis.hdc]
mov [Spis.hMem],eax
invoke SendMessage,[Spis.hList],LB_GETITEMDATA,[Spis.item],0
cmp eax,[Spis.hBmp1]
jne .No1
invoke SendMessage,[Spis.hList],LB_SETITEMDATA,[Spis.item],[Spis.hBmp2]
mov eax,[Spis.hBmp2]
mov [Spis.hBtn],eax
jmp .bez
.No1:
invoke SendMessage,[Spis.hList],LB_SETITEMDATA,[Spis.item],[Spis.hBmp1]
mov eax,[Spis.hBmp1]
mov [Spis.hBtn],eax
.bez:
invoke SelectObject,[Spis.hMem],[Spis.hBtn]
mov [Spis.oldDC],eax
mov eax,[Spis.rcItem.right]
sub eax,[Spis.rcItem.left]
mov ecx,[Spis.rcItem.bottom]
sub ecx,[Spis.rcItem.top]
invoke BitBlt,[Spis.hdc],[Spis.rcItem.left],[Spis.rcItem.top],eax,ecx,[Spis.h Mem],1,1,SRCCOPY
invoke GetTextMetrics,[Spis.hdc],Spis.tm
mov ecx,[Spis.rcItem.bottom]
add ecx,[Spis.rcItem.top]
sub ecx,[Spis.tm.tmHeight]
shr ecx,1
CountString __Buf
dec eax
invoke TextOut,[Spis.hdc],20,ecx,__Buf,eax
invoke SelectObject,[Spis.hMem],[Spis.oldDC]
invoke DeleteDC,[Spis.hMem]
invoke DeleteDC,[Spis.hdc]
jmp .finish
.prinyat:
jmp .finish
.close:
invoke DestroyWindow,[Spis.hList]
invoke EndDialog,[hwnd],0
.processed:
mov eax,0
.finish:
pop edi esi ebx
return