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

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 13 янв 2011.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Привет! Гдето баг тут
    Код (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

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Весь код + процедура обработки сообщений.
     
  3. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (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

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

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    неплохо бы сохранить edi перед использованием
     
  6. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    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."
    Вот это и не понятно..

    Код (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

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Semiono
    png грузится и отображается из ресурсов средствами GDI (без плюса) также как и битмап, никаких особых ухищрений для этого не нужно.
     
  8. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    зато примеров таких я не видел :\
    в масме обнаружил лишь car.asm, с его жуткими инклюдами масмовыми, строк 500 кода,
    на непонятном мне PROTO: языке ))
     
  9. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Y_Mur, спасибо, буду хоть иметь ввиду!
     
  10. Y_Mur

    Y_Mur Active Member

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