News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

How can i use 'MovetheImage' Function ?

Started by vega, March 20, 2009, 08:12:45 AM

Previous topic - Next topic

vega


  Hi, all
  I found these text in Win32 API.
 
  Win32 API Index/ Image Lists/ Moving the Image  section

              The following function, which drags the image to a new location,
              is intended to be called in response to the WM_MOUSEMOVE message.
             
              // MoveTheImage - drags an image to the specified coordinates. 
              // ptCur - new coordinates for the image
              // Returns TRUE if successful or FALSE otherwise.
             
               
              BOOL MoveTheImage(POINT ptCur)
              {
                if (!ImageList_DragMove(ptCur.x, ptCur.y))
                    return FALSE;
                return TRUE;
              }
             
 
  Please, show me a simple example.

  -ASM.Student

           

Jimg

That is only an example of you you would write such a function, it doesn't exist.  It's really an indicator of how to use ImageList_DragMove.

Here is a little bit on the subject - http://www.masm32.com/board/index.php?topic=6808.0

It's also used in Iczelion's tutorial number 19.

I wish I had a "simple" example for you, but I don't.  Perhaps someone else will.


vega

#2
 Aha, i see.
Thank you Jimg.


But, my original question is not solved.
I want to drag an Image by press left mouse button and move, in a client area of an Image.display.Dialog,
for viewing larger image than client rect size, as like AcdSee.

Here's my working code.
but it dose not working at mouse moving.
teach me please, about this problems.




         Begin of procedure  CreateImageDialogProc
       
            ;;ready for display Dialog.Icon
            ;;=Do  GlobalAlloc, GMEM_FIXED or GMEM_ZEROINIT, 32
            Make global buffer memory with size  32, GMEM_FIXED+GMEM_ZEROINIT 
            Set  lpGlobalMemory, ReturnValue
           
            Push  hIcon
            ;;=Pop  lpGlobalMemory
            Pop   [EAX]
           
            ;;gets Screen width & Height
            Do  GetSystemMetrics, SM_CXSCREEN
            Set  ScreenRect.right, GetValue
            Do  GetSystemMetrics, SM_CYSCREEN
            Set  ScreenRect.bottom, GetValue
   
            Set  EAX, imageHeight
            Add to  EAX, 32
            Set  EBX, imageWidth
            Add to  EBX, 10
           
            Style1 = WS_THICKFRAME+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_MAXIMIZEBOX+WS_VISIBLE

            Set dialog template  "ImageViewer ver0.0.0", "MS Sans Serif", 10, Style1, \
                0, \              ;;sets number of Controls(Button,Static,Icon, etc) in DialogBox
                0,0,100,50, \     ;;sets default size of DialogBox
                1024
           
            Call modal dialog   hInstance, 0, OperateImageDialogProc, ADDR lpGlobalMemory
   
            Remove global buffer memory  lpGlobalMemory
            Return
           
         End of procedure  CreateImageDialogProc
       



         Data block
            Set null dword  CursorX1pos
            Set null dword  CursorY1pos
            Set null dword  CursorXpos
            Set null dword  CursorYpos
            Set null dword  ImageHeadX
            Set null dword  ImageHeadY
         End block
         

         Begin of procedure  OperateImageDialogProc, <hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM>
   
            .IF uMsg is WM_INITDIALOG
   
               ;; Displays DialogBox Icon
               Set  EAX, lParam
               Set  EAX, [EAX]
               Do  SendMessage, hWnd, WM_SETICON, 1, [EAX]
   
               ;; changes Frame.Size of DialogBox as Image Size
               ;
               Set  EBX, imageWidth
               ;;adds as Left.Right.Frame.Boarder thickness
               Add_to  EBX, 8
               .IF EBX > ScreenRect.right
                  Set  EBX, ScreenRect.right
               .ENDIF   

               Set  EAX, imageHeight
               ;;adds as Caption & Bottom.Boarder thickness
               Add_to  EAX, 27
               .IF EAX > ScreenRect.bottom
                  Set  EAX, ScreenRect.bottom
               .ENDIF   

               Change window position and size with  hWnd, 0, 0, EBX, EAX
               Change window title  hWnd, ADDR ImageFileNameBuffer
               
               Set  ImageHeadX, 0
               Set  ImageHeadY, 0
               
               ;;then flow jump to Routine for WM_PAINT



            .ELSEIF uMsg is WM_LBUTTONDOWN
               
               .IF wParam is MK_LBUTTON
                  ;;= Get high and low order word into EAX EBX from  lParam
                  Set  EAX, lParam
                  Clear  EBX
                  ;;Get low order word into EBX
                  Set  BX, AX
                  ;;Get high order word into EAX
                  Shr  EAX, 16
                 
                  Set  CursorX1pos, EBX
                  Set  CursorY1pos, EAX
               .ENDIF
   
   
   
            .ELSEIF uMsg is WM_MOUSEMOVE
               .IF wParam is MK_LBUTTON
             
                  ;;if Mouse moves during Left.Mouse.Button is down
                  ;; displays specified bitmap image
                  ;
                  ;; xPos = LOWORD(lParam);  // horizontal position of cursor
                  ;; yPos = HIWORD(lParam);  // vertical position of cursor
                  ;
                 
                  ;;= Get high and low order word into EAX EBX from  lParam
                  Set  EAX, lParam
                  Clear  EBX

                  ;;Gets low order word into EBX
                  Set  BX, AX

                  ;;Gets high order word into EAX
                  Shr  EAX, 16
                 
                  Set  CursorXpos, EBX
                  Set  CursorYpos, EAX
                 
                  Set  EAX, CursorX1pos
                  .IF EAX > CursorXpos
                     Subtract from  EAX, CursorXpos
                     Set  ImageHeadX, EAX
                  .ELSE
                     Set  ImageHeadX, 0
                  .ENDIF
                     
                  Set  EAX, CursorY1pos
                  .IF EAX > CursorYpos
                     Subtract from  EAX, CursorYpos
                     Set  ImageHeadY, EAX
                  .ELSE
                     Set  ImageHeadY, 0
                  .ENDIF

                  Send message to  hWnd, WM_PAINT

               .ENDIF   
                   
               

               
               
           .ELSEIF uMsg is WM_PAINT
           
               Do  BeginPaint, hWnd, ADDR PaintStruc
               Set  hDC, ReturnValue
     
               ;;creates Memory.DC which used by DC and gets Memory.DC handle
               Do  CreateCompatibleDC, hDC
               Set  hMemDC, ReturnValue
               
               ;; stores Bitmap into memory_DC
               Do  SelectObject, hMemDC, hBitmap
               
               ;; displays specified bitmap image
               Do  BitBlt, hDC, 0, 0, imageWidth, imageHeight, hMemDC, ImageHeadX, ImageHeadY, SRCCOPY
   
               Do  DeleteDC, hMemDC
               Do  EndPaint, hWnd, ADDR PaintStruc
   
   
            .ELSEIF uMsg is WM_CLOSE
     
               Do  DeleteObject, hBitmap
               Do  EndDialog, hWnd, NULL
     

            .ELSE
               Set  EAX, FALSE
               Return

            .ENDIF
     
   
       
            Set  EAX, TRUE
            Return
   
         End of procedure  OperateImageDialogProc