// 위치 바꾸기 void CN3UIBase::SetPos(int x, int y) { // 움직인 차이 구하기 int dx, dy; dx = x - m_rcRegion.left; dy = y - m_rcRegion.top; MoveOffset(dx, dy); }
void CN3UIBase::SetPosCenter() { POINT pt = this->GetPos(); RECT rc = this->GetRegion(); int iW = rc.right - rc.left; int iH = rc.bottom - rc.top; int iWVP = CN3Base::s_CameraData.vp.Width; int iHVP = CN3Base::s_CameraData.vp.Height; // 움직인 차이 구하기 MoveOffset(((iWVP - iW) / 2) - pt.x, ((iHVP - iH) / 2) - pt.y); }
void ISelect::OnMouseMove(int x, int y) { PinTable * const ptable = GetPTable(); const float inv_zoom = 1.0f / ptable->m_zoom; if ((x == m_ptLast.x) && (y == m_ptLast.y)) { return; } if (m_fDragging && !GetIEditable()->GetISelect()->m_fLocked) // For drag points, follow the lock of the parent { if (!m_fMarkedForUndo) { m_fMarkedForUndo = true; GetIEditable()->BeginUndo(); GetIEditable()->MarkForUndo(); } MoveOffset((x - m_ptLast.x)*inv_zoom, (y - m_ptLast.y)*inv_zoom); m_ptLast.x = x; m_ptLast.y = y; SetObjectPos(); } }
otError Message::ParseHeader(void) { otError error = OT_ERROR_NONE; assert(mBuffer.mHead.mInfo.mReserved >= sizeof(GetHelpData()) + static_cast<size_t>((reinterpret_cast<uint8_t *>(&GetHelpData()) - mBuffer.mHead.mData))); memset(&GetHelpData(), 0, sizeof(GetHelpData())); GetHelpData().mHeaderOffset = GetOffset(); Read(GetHelpData().mHeaderOffset, sizeof(GetHelpData().mHeader), &GetHelpData().mHeader); for (const otCoapOption *option = GetFirstOption(); option != NULL; option = GetNextOption()) { } VerifyOrExit(GetHelpData().mNextOptionOffset > 0, error = OT_ERROR_PARSE); GetHelpData().mHeaderLength = GetHelpData().mNextOptionOffset - GetHelpData().mHeaderOffset; MoveOffset(GetHelpData().mHeaderLength); exit: return error; }
DWORD CN3UIBase::MouseProc(DWORD dwFlags, const POINT& ptCur, const POINT& ptOld ) { DWORD dwRet = UI_MOUSEPROC_NONE; if (!m_bVisible) return dwRet; // UI 움직이는 코드 if (UI_STATE_COMMON_MOVE == m_eState) { if (dwFlags&UI_MOUSE_LBCLICKED) { SetState(UI_STATE_COMMON_NONE); } else { MoveOffset(ptCur.x - ptOld.x, ptCur.y - ptOld.y); } dwRet |= UI_MOUSEPROC_DONESOMETHING; return dwRet; } if(false == IsIn(ptCur.x, ptCur.y)) // 영역 밖이면 { if(false == IsIn(ptOld.x, ptOld.y)) { return dwRet;// 이전 좌표도 영역 밖이면 } dwRet |= UI_MOUSEPROC_PREVINREGION; // 이전 좌표는 영역 안이었다. } else { // tool tip 관련 if (s_pTooltipCtrl) s_pTooltipCtrl->SetText(m_szToolTip); } dwRet |= UI_MOUSEPROC_INREGION; // 이번 좌표는 영역 안이다. //this_ui if(m_pChildUI && m_pChildUI->IsVisible()) return dwRet; // child에게 메세지 전달 for(UIListItor itor = m_Children.begin(); m_Children.end() != itor; ++itor) { CN3UIBase* pChild = (*itor); DWORD dwChildRet = pChild->MouseProc(dwFlags, ptCur, ptOld); if (UI_MOUSEPROC_DONESOMETHING & dwChildRet) { // 이경우에는 먼가 포커스를 받은 경우이다. // (아래 코드는 dialog를 관리하는 곳에서 해야 한다. 따라서 막아놓음) // m_Children.erase(itor); // 우선 리스트에서 지우고 // m_Children.push_front(pChild); // 맨앞에 넣는다. 그리는 순서를 맨 나중에 그리도록 하려고 dwRet |= (UI_MOUSEPROC_CHILDDONESOMETHING|UI_MOUSEPROC_DONESOMETHING); return dwRet; } } // UI 움직이는 코드 if (UI_STATE_COMMON_MOVE != m_eState && PtInRect(&m_rcMovable, ptCur) && (dwFlags&UI_MOUSE_LBCLICK) ) { SetState(UI_STATE_COMMON_MOVE); dwRet |= UI_MOUSEPROC_DONESOMETHING; return dwRet; } return dwRet; }