· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› почему происходит такое

Посл.отвђт Сообщенiе


Дата: Авг 24, 2003 00:02:47

Подскажите почему происходит такое:
Диалог показывается в первый (третий и далее в нечётные) раз с 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


Дата: Авг 25, 2003 02:18:37

проследи за __class, может быть она по четным разам обнуляется?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074