исчезает окно )))

Discussion in 'WASM.BEGINNERS' started by Semiono, Jan 13, 2011.

  1. Semiono

    Semiono Member

    Blog Posts:
    0
    Joined:
    Nov 27, 2005
    Messages:
    793
    Привет! Гдето баг тут
    Code (Text):
    1.   xchg    eax,ebx
    2.   invoke  CreateWindowEx,ebx,StaticClass,ebx,WS_VISIBLE+WS_OVERLAPPEDWINDOW+WS_CLIPCHILDREN,ebx,ebx,200,200,ebx,ebx,ebx,ebx
    3.   mov     edi,eax
    4.   invoke  GetDC,edi
    5.   mov     [DC],eax
    6. ...
    Кароче окно появляется, потом тискаю по нему курсором и окно становиться прозрачным.
    И глюченным.
    Что бы это значило, где причина может быть?
    Может флаги WS_OVERLAPPEDWINDOW какие-то? Или стайлы? Платформа XP 32bit
     
  2. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    Весь код + процедура обработки сообщений.
     
  3. Semiono

    Semiono Member

    Blog Posts:
    0
    Joined:
    Nov 27, 2005
    Messages:
    793
    Code (Text):
    1. proc wndproc,wnd,msg,wparam,lparam
    2.   mov eax,[msg]
    3.   cmp eax,WM_PAINT
    4.   jne @f
    5.       mov    edi,[DC]
    6.       invoke PlayEnhMetaFile,edi,[hwmf1],WmfRect
    7.       invoke ValidateRect,[wnd],0
    8.       ret
    9.   @@:
    10.   cmp eax,WM_SIZE
    11.   jne @f
    12.       invoke GetClientRect,[wnd],Rect
    13.       ret
    14.   @@:
    15.   cmp eax,WM_CLOSE
    16.   jne @f
    17.       invoke ExitProcess,NULL;ebx
    18.   @@:
    19.   leave
    20.   jmp [DefWindowProc]
    21. endp
    Вроде бы ошибок нет явных, но может что-то пропущено.
     
  4. FatMoon

    FatMoon New Member

    Blog Posts:
    0
    Joined:
    Nov 28, 2002
    Messages:
    954
    Location:
    Russia
    что, совсем нет ошибок? А признак того, что событие обработано? типа вернуть в eax ничего не надо, типа TRUE? А обработка WM_PAINT - BeginPaint-EndPaint сделать не надо, не? или вся надежда на ValidateRect? тогда надо заодно проверить, что там возвращается, успешное завершение или нет.
     
  5. cresta

    cresta Active Member

    Blog Posts:
    0
    Joined:
    Jun 13, 2004
    Messages:
    2,257
    неплохо бы сохранить edi перед использованием
     
  6. Semiono

    Semiono Member

    Blog Posts:
    0
    Joined:
    Nov 27, 2005
    Messages:
    793
    Как можно PNG загрузить в окно, желательно из ресурсов? (и желательно два рядом)
    Нашёл пример, но не осилил masm32
    http://www.masm32.com/board/index.php?topic=10191.0
    "1. Add the function gdiplusLoadBitmapFromResource to your program, or include gdiplusLoadBitmapFromResource.inc."
    Вот это и не понятно..

    Code (Text):
    1. include '%fasm%/win32ax.inc'
    2. section '.code' executable
    3. start:
    4.         invoke GetModuleHandle,NULL
    5.         mov [hInstance],eax
    6.  
    7.         invoke GdiplusStartup,gdiplusToken,gdiplusSInput,NULL
    8.  
    9.         push pngImage
    10.         push pngType
    11.         push 9000
    12.         push hInstance
    13.         call gdiplusLoadBitmapFromResource
    14.  
    15.         invoke Sleep,3000
    16.         invoke GdipDisposeImage,addr pngImage
    17.         invoke GdiplusShutdown,gdiplusToken
    18.  
    19. exit:
    20.         invoke ExitProcess,NULL
    21.  
    22. section '.data' readable writeable
    23.  
    24.         struct GdiplusStartupInput
    25.         GdiplusVersion dd ?
    26.         DebugEventCallback dd ?
    27.         SuppressBackgroundThread dd ?
    28.         SuppressExternalCodecs dd ?
    29.         ends
    30.  
    31.         gdiplusToken dd ?
    32.         gdiplusSInput GdiplusStartupInput <1, NULL, FALSE, FALSE>
    33.  
    34.         pngImage dd NULL
    35.         pngType db "PNG",NULL
    36.         hInstance dd ?
    37.  
    38. section '.idata' import readable
    39.  
    40.         library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL',gdiplus,'GDIPLUS.DLL'
    41.         include '%fasm%/api/kernel32.inc'
    42.         include '%fasm%/api/shell32.inc'
    43.         import gdiplus,GdiplusStartup,'GdiplusStartup',\
    44.         GdipDisposeImage,'GdipDisposeImage',GdiplusShutdown,'GdiplusShutdown'
    45.  
    46. section '.rsrc' resource readable
    47.  
    48.         directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions
    49.  
    50.         resource icons,\
    51.         1,LANG_NEUTRAL,icon_data1,\
    52.         2,LANG_NEUTRAL,icon_data2,\
    53.         3,LANG_NEUTRAL,icon_data3,\
    54.         4,LANG_NEUTRAL,icon_data4
    55.  
    56.         resource group_icons,17,LANG_NEUTRAL,main_icon
    57.         resource versions,1,LANG_NEUTRAL,version
    58. ;        9000 PNG "myImage.png"
    59.  
    60.         icon main_icon,\
    61.         icon_data1,'%fasm%\exec1.ico',\
    62.         icon_data2,'%fasm%\exec2.ico',\
    63.         icon_data3,'%fasm%\exec3.ico',\
    64.         icon_data4,'%fasm%\exec4.ico'
    65.  
    66.         versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,NULL,\
    67.                     'FileDescription','~.exe',\
    68.                     'LegalCopyright','2001-2005 GmbH',\
    69.                     'FileVersion','1.0.0.0',\
    70.                     'ProductVersion','1.0.0.0',\
    71.                     'OriginalFilename','~.exe',\
    72.                     'Company','Semiono'
    Примерно так что-то набросал. Ресурс тоже не знаю как точно указать :dntknw:
     
  7. Y_Mur

    Y_Mur Active Member

    Blog Posts:
    0
    Joined:
    Sep 6, 2006
    Messages:
    2,494
    Semiono
    png грузится и отображается из ресурсов средствами GDI (без плюса) также как и битмап, никаких особых ухищрений для этого не нужно.
     
  8. Semiono

    Semiono Member

    Blog Posts:
    0
    Joined:
    Nov 27, 2005
    Messages:
    793
    зато примеров таких я не видел :\
    в масме обнаружил лишь car.asm, с его жуткими инклюдами масмовыми, строк 500 кода,
    на непонятном мне PROTO: языке ))
     
  9. Semiono

    Semiono Member

    Blog Posts:
    0
    Joined:
    Nov 27, 2005
    Messages:
    793
    Y_Mur, спасибо, буду хоть иметь ввиду!
     
  10. Y_Mur

    Y_Mur Active Member

    Blog Posts:
    0
    Joined:
    Sep 6, 2006
    Messages:
    2,494
    Semiono
    Да что-то у меня тоже с png не очень получилось, хотя точно помню что раньше давно делал так-же :)
    Наверно дело в том что сейчас не стоит png-шный компонент в OLE (кажется эти компоненты ie в систему пихает но не всегда).
    Но gif и jpeg работают, попробуй может у тебя и с png всё сработает :)
    Картинка задаётся в файле Demo_PNG_00.rc, грузится в контекст в памяти в событии WM_CREATE с использованием основанной на OLE функции BitmapFromResource из masm32.lib. На экран отображается в событии WM_PAINT.