Привет! Гдето баг тут Код (Text): xchg eax,ebx invoke CreateWindowEx,ebx,StaticClass,ebx,WS_VISIBLE+WS_OVERLAPPEDWINDOW+WS_CLIPCHILDREN,ebx,ebx,200,200,ebx,ebx,ebx,ebx mov edi,eax invoke GetDC,edi mov [DC],eax ... Кароче окно появляется, потом тискаю по нему курсором и окно становиться прозрачным. И глюченным. Что бы это значило, где причина может быть? Может флаги WS_OVERLAPPEDWINDOW какие-то? Или стайлы? Платформа XP 32bit
Код (Text): proc wndproc,wnd,msg,wparam,lparam mov eax,[msg] cmp eax,WM_PAINT jne @f mov edi,[DC] invoke PlayEnhMetaFile,edi,[hwmf1],WmfRect invoke ValidateRect,[wnd],0 ret @@: cmp eax,WM_SIZE jne @f invoke GetClientRect,[wnd],Rect ret @@: cmp eax,WM_CLOSE jne @f invoke ExitProcess,NULL;ebx @@: leave jmp [DefWindowProc] endp Вроде бы ошибок нет явных, но может что-то пропущено.
что, совсем нет ошибок? А признак того, что событие обработано? типа вернуть в eax ничего не надо, типа TRUE? А обработка WM_PAINT - BeginPaint-EndPaint сделать не надо, не? или вся надежда на ValidateRect? тогда надо заодно проверить, что там возвращается, успешное завершение или нет.
Как можно 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): include '%fasm%/win32ax.inc' section '.code' executable start: invoke GetModuleHandle,NULL mov [hInstance],eax invoke GdiplusStartup,gdiplusToken,gdiplusSInput,NULL push pngImage push pngType push 9000 push hInstance call gdiplusLoadBitmapFromResource invoke Sleep,3000 invoke GdipDisposeImage,addr pngImage invoke GdiplusShutdown,gdiplusToken exit: invoke ExitProcess,NULL section '.data' readable writeable struct GdiplusStartupInput GdiplusVersion dd ? DebugEventCallback dd ? SuppressBackgroundThread dd ? SuppressExternalCodecs dd ? ends gdiplusToken dd ? gdiplusSInput GdiplusStartupInput <1, NULL, FALSE, FALSE> pngImage dd NULL pngType db "PNG",NULL hInstance dd ? section '.idata' import readable library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL',gdiplus,'GDIPLUS.DLL' include '%fasm%/api/kernel32.inc' include '%fasm%/api/shell32.inc' import gdiplus,GdiplusStartup,'GdiplusStartup',\ GdipDisposeImage,'GdipDisposeImage',GdiplusShutdown,'GdiplusShutdown' section '.rsrc' resource readable directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions resource icons,\ 1,LANG_NEUTRAL,icon_data1,\ 2,LANG_NEUTRAL,icon_data2,\ 3,LANG_NEUTRAL,icon_data3,\ 4,LANG_NEUTRAL,icon_data4 resource group_icons,17,LANG_NEUTRAL,main_icon resource versions,1,LANG_NEUTRAL,version ; 9000 PNG "myImage.png" icon main_icon,\ icon_data1,'%fasm%\exec1.ico',\ icon_data2,'%fasm%\exec2.ico',\ icon_data3,'%fasm%\exec3.ico',\ icon_data4,'%fasm%\exec4.ico' versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,NULL,\ 'FileDescription','~.exe',\ 'LegalCopyright','2001-2005 GmbH',\ 'FileVersion','1.0.0.0',\ 'ProductVersion','1.0.0.0',\ 'OriginalFilename','~.exe',\ 'Company','Semiono' Примерно так что-то набросал. Ресурс тоже не знаю как точно указать
Semiono png грузится и отображается из ресурсов средствами GDI (без плюса) также как и битмап, никаких особых ухищрений для этого не нужно.
зато примеров таких я не видел :\ в масме обнаружил лишь car.asm, с его жуткими инклюдами масмовыми, строк 500 кода, на непонятном мне PROTO: языке ))
Semiono Да что-то у меня тоже с png не очень получилось, хотя точно помню что раньше давно делал так-же Наверно дело в том что сейчас не стоит png-шный компонент в OLE (кажется эти компоненты ie в систему пихает но не всегда). Но gif и jpeg работают, попробуй может у тебя и с png всё сработает Картинка задаётся в файле Demo_PNG_00.rc, грузится в контекст в памяти в событии WM_CREATE с использованием основанной на OLE функции BitmapFromResource из masm32.lib. На экран отображается в событии WM_PAINT.