flat assembler
Message board for the users of flat assembler.
Index
> Windows > How chess works? |
Author |
|
asmhack 02 Jan 2011, 19:47
With visual basic actually, pretty easy.
|
|||
02 Jan 2011, 19:47 |
|
JohnFound 03 Jan 2011, 07:13
You have to read several topics from WinAPI help. I will give you only references.
Create combo box (CreateWindowEx) with CBS_HASSTRINGS style. Then you have to fill the combo with the names of the bitmaps (CB_ADDSTRING). For every added item, you have to assign item data, related to the bitmap location - resource identifier, file name or other. (CB_SETITEMDATA). Then, in the parent window procedure, you have to track WM_COMMAND message for CBN_EDITCHANGE (or maybe CBN_SELENDOK) notification in order to determine when the used changed the combo box selection. Then for the selected item use CB_GETITEMDATA and with retrieved data load the bitmap (from file, resources or whatever). See LoadImage, LoadBitmap functions. Then you can draw the bitmap to some device context - See BitBlt and other bitmap functions. About bitmap, there is another approach, if all bitmaps you need have the same size - you can create one ImageList, that contains all bitmaps and then use ImageList_Draw or ImageList_DrawEx to draw needed bitmap by index. |
|||
03 Jan 2011, 07:13 |
|
semiono 13 Jan 2011, 16:21
1. I found a code for paint the gui. But this code is wrong. Under WinXP the window is down to transparently ghost. Where is troubles?
Code: include '%fasm%/win32ax.inc' section '.code' executable start: 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 CreateWindowEx,ebx,ComboBoxClass,ebx,WS_VISIBLE+WS_CHILD+CBS_DROPDOWNLIST+WS_CLIPSIBLINGS,10,10,150,20,eax,ebx,ebx,ebx mov [combo],eax invoke GetDC,edi mov [DC],eax invoke CreatePen,PS_SOLID,4,0xff00 invoke SelectObject,[DC],eax invoke SetWindowLong,edi,GWL_WNDPROC,wndproc stdcall wndproc,edi,WM_SIZE,ebx,ebx @@: invoke GetMessage,msg,ebx,ebx,ebx invoke DispatchMessage,msg jmp @r proc wndproc,wnd,msg,wparam,lparam mov eax,[msg] cmp eax,WM_PAINT jne @f mov edi,[DC] invoke FillRect,edi,Rect,ebx invoke FillRect,edi,Rect2,2 invoke MoveToEx,edi,40,45,ebx invoke LineTo,edi,40,95 invoke Ellipse,edi,20,50,60,90 invoke ValidateRect,[wnd],ebx invoke InvalidateRect,[combo],ebx,eax ret @@: cmp eax,WM_SIZE jne @f invoke GetClientRect,[wnd],Rect ret @@: cmp eax,WM_CLOSE jne @f jmp exit; invoke ExitProcess,ebx @@: leave jmp [DefWindowProc] endp exit: invoke ExitProcess,NULL .end start section '.data' readable ComboBoxClass db 'COMBOBOX',NULL StaticClass db 'STATIC',NULL section '.data' readable writable Rect RECT Rect2 RECT 15,45,65,95 DC rd 1 msg MSG combo rd 1 2. How to assing bitmap1, bitmap2 in resources? And how to load?.. |
|||
13 Jan 2011, 16:21 |
|
JohnFound 14 Jan 2011, 06:43
1. You have to read carefully WM_PAINT help topic in win32.hlp file of other help resource. Also read BeginPaint and EndPaint functions topics.
2. Read LoadImage, LoadResource; |
|||
14 Jan 2011, 06:43 |
|
semiono 03 Feb 2011, 20:50
Why window is black? Black/white from refresh. (I do not need to colorize window and/or load any skins. I need classic view) Code: format PE GUI 3.1 include '%fasm%/win32ax.inc' section '.code' executable start: invoke DialogBoxParam,400000h,37,HWND_DESKTOP,DialogProc,NULL exit: invoke ExitProcess,NULL ID_LIST = 104 proc DialogProc wnd,msg,wparam,lparam cmp [msg],WM_PAINT je paint cmp [msg],WM_COMMAND je exec cmp [msg],WM_INITDIALOG je dlg cmp [msg],WM_CLOSE je exit xor eax,eax ret paint: pushad invoke SendMessage,[CtrlID],WM_PAINT,NULL,NULL mov ebx,[ComboSel] mov ebx,[chords+ebx*4] mov [EmfRect.top],40 mov [EmfRect.bottom],80 mov esi,5 row: mov [EmfRect.left],10 mov [EmfRect.right],50 mov edi,6 col: xor eax,eax shl ebx,1 adc eax,eax invoke PlayEnhMetaFile,[DC],[hemf+eax*4],EmfRect add [EmfRect.left],40 add [EmfRect.right],40 dec edi jne col add [EmfRect.top],40 add [EmfRect.bottom],40 dec esi jne row invoke ValidateRect,[wnd],NULL popad ret exec: cmp [wparam],CBN_SELENDOK shl 16 + ID_LIST jne @f invoke SendMessage,[CtrlID],CB_GETCURSEL,NULL,NULL mov [ComboSel],eax jmp paint @@: ret dlg: push edi invoke GetDC,[wnd] mov [DC],eax invoke SetEnhMetaFileBits,emf1size,emf1 mov [hemf],eax invoke SetEnhMetaFileBits,emf2size,emf2 mov [hemf+4],eax invoke GetDlgItem,[wnd],ID_LIST mov [CtrlID],eax mov edi,items @@: invoke SendMessage,[CtrlID],CB_ADDSTRING,NULL,edi xor eax,eax mov ecx,-1 repne scasb cmp [edi],al jnz @r invoke SendMessage,[CtrlID],CB_SETCURSEL,[ComboSel],NULL pop edi ret endp .end start section '.data' readable emf1 file '1.emf' emf2 file '2.emf' emf1size=$-emf1 emf2size=$-emf2 section '.data' readable writeable EmfRect RECT items db 'Am',NULL db 'Em',NULL db 'C',NULL db NULL chords dd 00001000110000000000000000000000b,\ 00000001100000000000000000000000b,\ 00001000100011000000000000000000b ComboSel dd 2 hemf rd 3 DC dd NULL CtrlID dd NULL section '.rsrc' resource readable directory RT_DIALOG,dialogs,RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions,RT_MANIFEST,_manifest resource dialogs,37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration 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 resource _manifest,1,LANG_NEUTRAL,manifest dialog demonstration,'Chords',0,25,150,180,WS_CAPTION+WS_SYSMENU+DS_CENTER+DS_SYSMODAL+WS_CLIPCHILDREN dialogitem 'Combobox','',ID_LIST, 8,8,121,100,WS_VISIBLE+CBS_DROPDOWNLIST+CBS_HASSTRINGS+WS_VSCROLL enddialog 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' resdata manifest file '%fasm%\manifest32.xml' endres What this is lame? --- If directive "format PE GUI" absent in this code the window is jump to center of screen... Usaly i dont use "format" ? |
|||
03 Feb 2011, 20:50 |
|
semiono 04 Feb 2011, 01:27
http://www.masm32.com/board/index.php?topic=10191.0
Quote: 1. Add the function gdiplusLoadBitmapFromResource to your program, or include gdiplusLoadBitmapFromResource.inc. How do it in fasm? Code: gdiplusLoadBitmapFromResource proto :HMODULE, :LPSTR, :LPSTR, :DWORD |
|||
04 Feb 2011, 01:27 |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2025, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.