小弟,最近在做一個繪圖程序,需要是畫棋盤格子作為主程序的背景,一個像素為一個小格子。
    所以要實現對格子進行放大縮小。我想把他做成像Adobe reader那樣,分別通過點擊放大,縮小鈕然後對背景圖片進行操作,當背景圖片圖片的大小超過一定范圍後,只顯示一部分,然後可以通過鼠標右鍵拖動圖片,顯示想要觀察的部分.請各位高手指點指點,說說縮放,拖動顯示原理,有具體代碼最好了,謝謝!

解决方案 »

  1.   

    背景保存到一个TBitmap对象中。拖动Bitblt相应部分即可。
      private
       FBackBmp: TBitmap;
       FIsDrag : Boolean;  FBackBmp:= TBitmap.Create;
      FBackBmp.LoadFromFile('Back.bmp');OnMouseDown(....)
      if Button = mbLeft then FIsDrag:= true;OnMouseMove(....)  // rctVisible为显示区域
      if FIsDrag then
      Bitblt(Self.Canvas.Handle, rctVisible.Left, rctVisible.Top, 
             rctVisible.Right - rctVisible.Left, rctVisible.Bottom - rctVisible.Top,
             FBackBmp.Canvas.Handle, rctVisible.Left, rctVisible.Top, SRCCOPY);OnMouseUp(....)
      FIsDrag:= false;
      

  2.   

      Bitblt(Self.Canvas.Handle, rctVisible.Left, rctVisible.Top, 
             rctVisible.Right - rctVisible.Left, rctVisible.Bottom - rctVisible.Top,
             FBackBmp.Canvas.Handle, rctVisible.Left, rctVisible.Top, SRCCOPY);
      --------------
      这里把BitBlt换成StretchBlt,参数你去看帮助吧。 然后你就可以放大图像了。具体代码我就不写了。自己慢慢学着写吧。