void DrawScene() { BeginScene(1); ImageToScreen(pimage_bg,0,0); RenderQuad(pimage_box,0,0,0,0,70,185,1,1,0,maskbox); RenderQuad(pimage_box,0,0,0,0,70,5,1,1,0,maskbox); DrawImage(pimage_icon[0],0,0,0,0,-20,-37,128,128); DrawImage(pimage_icon[1],0,0,0,0,-20,143,128,128); ImageToScreen(pimage_text,0,0); EndScene(); }
void DrawScene() { BeginScene(1); ImageToScreen(pimage_bg,0,0); //RenderQuad(pimage_box,0,0,0,0,70,185,1,1,0,maskbox); //RenderQuad(pimage_box,0,0,0,0,70,5,1,1,0,maskbox); //DrawImage(pimage_icon[0],0,0,0,0,-20,-37,128,128); //DrawImage(pimage_icon[1],0,0,0,0,-20,143,128,128); ImageToScreen(pimage_text,0,0); //DrawEllipse(50,50,11,21,0xff0000ff,DISPLAY_PIXEL_FORMAT_8888); DrawEllipse(50,50,10,20,0xff0000ff,DISPLAY_PIXEL_FORMAT_8888); DrawEllipse(50,50,9,19,0x3f0000ff,DISPLAY_PIXEL_FORMAT_8888); EndScene(); }
BOOL CTexViewer::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { switch(m_eEditMode) { case EDITMODE_SELECT: { HCURSOR hCur = m_hCursorSelect; eDRAGTYPE eDT = m_eDragType; if (DRAGTYPE_NONE == m_eDragType) // 드레그 Type이 NONE이면 cursor의 위치를 얻어서 테스트하기 { CPoint pt; if (GetCursorPos(&pt)) { ScreenToClient(&pt); CRect rcReal = m_rcSelectedRect; ImageToScreen(&rcReal); eDT = CheckDragType(rcReal, pt); } } switch(eDT) { case DRAGTYPE_NONE: break; case DRAGTYPE_MOVE: hCur=m_hCursorSizeAll; break; case DRAGTYPE_LEFT: case DRAGTYPE_RIGHT: hCur=m_hCursorSizeWE; break; case DRAGTYPE_TOP: case DRAGTYPE_BOTTOM: hCur=m_hCursorSizeNS; break; case DRAGTYPE_LEFTTOP: case DRAGTYPE_RIGHTBOTTOM: hCur=m_hCursorSizeNWSE; break; case DRAGTYPE_RIGHTTOP: case DRAGTYPE_LEFTBOTTOM: hCur=m_hCursorSizeNESW; break; } SetCursor(hCur); return TRUE; } break; case EDITMODE_ZOOM: if (GetAsyncKeyState(VK_MENU) & 0xff00) SetCursor(m_hCursorZoomOut); else SetCursor(m_hCursorZoomIn); return TRUE; break; case EDITMODE_HAND: SetCursor(m_hCursorHand); return TRUE; break; } return CWnd::OnSetCursor(pWnd, nHitTest, message); }
void DrawScene() { BeginScene(1); ImageToScreen(p_bg,0,0); DrawImage(p_logo,0,0,0,0,128,0,256,256); DrawImageMask(p_logo,0,0,0,0,0/*dx*/,0/*dy*/,128/*dw*/,128/*dh*/,logomask1); DrawImageMask(p_logo,0,0,0,0,480-128/*dx*/,272-128/*dy*/,128/*dw*/,128/*dh*/,0x7fffffff); DrawImageMask(p_logo,0,0,0,0,0/*dx*/,272-128/*dy*/,128/*dw*/,128/*dh*/,logomask2); DrawImageMask(p_logo,0,0,0,0,480-128/*dx*/,0/*dy*/,128/*dw*/,128/*dh*/,logomask2); EndScene(); }
void CTexViewer::OnLButtonDown(UINT nFlags, CPoint point) { m_bDrag = TRUE; SetCapture(); if (EDITMODE_SELECT == m_eEditMode) { // 지정된 사각형이 있으면 그 사각형을 변형하는지 체크하자 if (-1 != m_rcSelectedRect.left) { CRect rcReal = m_rcSelectedRect; ImageToScreen(&rcReal); m_eDragType = CheckDragType(rcReal, point); } else m_eDragType = DRAGTYPE_NONE; if (DRAGTYPE_NONE == m_eDragType) { CPoint pt = point; ScreenToImage(&pt); // image 좌표로 변환 m_rcSelectedRect.SetRect(pt, pt); m_eDragType = DRAGTYPE_SELECT; m_bDeselect = TRUE; Invalidate(); } else if (DRAGTYPE_MOVE == m_eDragType) { m_ptClickOffset = point; ScreenToImage(&m_ptClickOffset); m_ptClickOffset = m_ptClickOffset-m_rcSelectedRect.TopLeft(); } } GetParent()->PostMessage(UM_UPDATE_INFO, TRUE, MAKELPARAM((short)point.y,(short)point.x)); m_ptMouseOld = point; CWnd::OnLButtonDown(nFlags, point); }
void CTexViewer::OnLButtonUp(UINT nFlags, CPoint point) { if (m_bDrag) { m_bDrag = FALSE; if (EDITMODE_SELECT == m_eEditMode) { if (DRAGTYPE_SELECT == m_eDragType) { if (m_bDeselect) m_rcSelectedRect.SetRect(-1,-1,-1,-1); // deselect else { CPoint pt = point; ScreenToImage(&pt); // image 좌표로 변환 // 사각형의 left,top은 작은 좌표 right, bottom은 큰 좌표로 정리하기 if (m_rcSelectedRect.left > pt.x) { m_rcSelectedRect.right = m_rcSelectedRect.left; m_rcSelectedRect.left = pt.x; } else m_rcSelectedRect.right = pt.x; if (m_rcSelectedRect.top > pt.y) { m_rcSelectedRect.bottom = m_rcSelectedRect.top; m_rcSelectedRect.top = pt.y; } else m_rcSelectedRect.bottom = pt.y; } } else { ProcessDrag(point); } m_eDragType = DRAGTYPE_NONE; if (m_iCurSelectedImage>=0) m_ImageRects[m_iCurSelectedImage] = m_rcSelectedRect; // 만약 ImageType별로 저장한다면 선택된 사각형을 copy해주기 Invalidate(); } else if (EDITMODE_ZOOM == m_eEditMode) { if (m_ptMouseOld == point) { CRect rc; GetClientRect(&rc); CPoint ptPrev = point; ScreenToImage(&ptPrev); // zoom 하기 전의 image좌표 저장 Zoom((GetAsyncKeyState(VK_MENU) & 0xff00) ? FALSE : TRUE); CPoint ptNext = ptPrev; ImageToScreen(&ptNext); // zoom 한 후의 image좌표를 screen좌표로 전환 ptNext.x = int((ptNext.x-rc.CenterPoint().x)/m_fScale); //화면 가운데로 오게끔 설정 ptNext.y = int((ptNext.y-rc.CenterPoint().y)/m_fScale); SetLeftTopInImage( m_ptLeftTopInImage + ptNext); //차이만큼 옮기기 } else { } } else if (EDITMODE_HAND == m_eEditMode) { CPoint ptDiff = m_ptMouseOld - point; ptDiff.x = (int)(ptDiff.x / m_fScale); ptDiff.y = (int)(ptDiff.y / m_fScale); SetLeftTopInImage(m_ptLeftTopInImage+ptDiff); } } m_ptMouseOld = point; ReleaseCapture(); GetParent()->PostMessage(UM_UPDATE_INFO, TRUE, MAKELPARAM((short)point.y,(short)point.x)); CWnd::OnLButtonUp(nFlags, point); }