Search

'드래그'에 해당되는 글 2건

  1. 2016.08.30 MFC File Icon Drag and Drop
  2. 2013.08.03 JAVA DRAG 가능한 Component 만들기

MFC File Icon Drag and Drop

Programming/MFC 2016. 8. 30. 11:19 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFC File Icon Drag and Drop










드래그앤드랍기능을 쓰고 싶은


Dialog 나 ListControl 을 리소스 뷰에서 선택한다.











속성 항목


[동작] [Accept Files] 항목을 True 로 바꾼다.



Files 을 드래그앤드랍으로 받을 수 있게 된다.












해당 컴포넌트에 드래그앤드랍이 발생할 경우


OnDropFiles(HDROP hDropInfo)


함수로 메시지가 들어오게 된다.











해당 함수를 오버라이딩 하는 방법은


해당 컴포넌트의 Dialog 클래스를


클래스 뷰에서 선택하고 속성 창을 연다.






WM_DROPFILES 메시지에 OnDropFiles 를 활성화 시켜준다.







그러면 Dialog 클래스 cpp 파일에 OnDropFiles 함수가 생성된다.






다음 코드를 OnDropFiles(HDROP hDropInfo) 함수에 추가하여 실행하여 본다.





  int nFiles;


char szPathName[MAX_PATH];  // 파일 경로명이 들어간다.


CString strFileName;


// 드래그앤드롭된 파일의 갯수

nFiles = ::DragQueryFile(hDropInfo, 0xFFFFFFFF, szPathName, MAX_PATH);


for (int i = 0; i < nFiles; i++)

{

// 파일의 경로 얻어옴

::DragQueryFile(hDropInfo, i, szPathName, MAX_PATH);

MessageBox(szPathName, "DropAndDropFile");

}










336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

class DraggableComponent extends JComponent

{

 

    /** If sets <b>TRUE</b> this component is draggable */

    private boolean draggable = true;

    /**

     * 2D Point representing the coordinate where mouse is, relative parent

     * container

     */

    protected Point anchorPoint;

    /** Default mouse cursor for dragging action */

    protected Cursor draggingCursor = Cursor

           .getPredefinedCursor(Cursor.HAND_CURSOR);

    /**

     * If sets <b>TRUE</b> when dragging component, it will be painted over each

     * other (z-Buffer change)

     */

    protected boolean overbearing = false;

 

    public DraggableComponent()

    {

        addDragListeners();

        setOpaque(true);

        setBackground(new Color(240, 240, 240));

    }

 

    /**

     * Add Mouse Motion Listener with drag function

     */

    private void addDragListeners()

    {

        /**

         * This handle is a reference to THIS because in next Mouse Adapter

         * "this" is not allowed

         */

        final DraggableComponent handle = this;

        addMouseMotionListener(new MouseAdapter()

        {

 

           @Override

           public void mouseMoved(MouseEvent e)

           {

               anchorPoint = e.getPoint();

           setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

           }

 

           @Override

           public void mouseDragged(MouseEvent e)

           {

               int anchorX = anchorPoint.x;

               int anchorY = anchorPoint.y;

 

               Point parentOnScreen = getParent().getLocationOnScreen();

               Point mouseOnScreen = e.getLocationOnScreen();

               Point position = new Point(mouseOnScreen.x - parentOnScreen.x

                       - anchorX, mouseOnScreen.y - parentOnScreen.y - anchorY);

               setLocation(position);

 

               // Change Z-Buffer if it is "overbearing"

               if (overbearing)

               {

                   getParent().setComponentZOrder(handle, 0);

                   repaint();

               }

           }

        });

    }

 

    @Override

    protected void paintComponent(Graphics g)

    {

        super.paintComponent(g);

        if (isOpaque())

        {

           g.setColor(getBackground());

           g.fillRect(0, 0, getWidth(), getHeight());

        }

    }

 

    private void removeDragListeners()

    {

        for (MouseMotionListener listener : this.getMouseMotionListeners())

        {

           removeMouseMotionListener(listener);

        }

        setCursor(Cursor.getDefaultCursor());

    }

}


http://www.codeproject.com/Articles/116088/Draggable-Components-in-Java-Swing

'Programming > JAVA,JSP' 카테고리의 다른 글

JAVA Console Token 구현  (0) 2013.08.07
JAVA 제네릭을 사용한 Store Class  (0) 2013.08.07
JAVA Swing 두개의 판넬을 겹치기  (0) 2013.08.03
JAVA JNI  (0) 2013.05.01
Eclipse Tips  (0) 2013.04.30