LRESULT CElcSkinFrameBase::TrackBorderHitTest(CPoint point) { CRect rcLT(0, 0, RESIZE_BRODER, RESIZE_BRODER); CRect rcLB(0, m_rect.bottom-m_nBottom, m_nLeft, m_rect.bottom); CRect rcRT(m_rect.right-m_nRight, 0, m_rect.right, m_nRight); CRect rcRB(m_rect.right-m_nRight, m_rect.bottom-m_nBottom, m_rect.right, m_rect.bottom); CRect rcLeft(rcLT.left, rcLT.bottom, rcLT.right, rcLB.top); CRect rcTop(rcLT.right, rcLT.top, rcRT.left, rcLT.top+RESIZE_BRODER); CRect rcRight(rcRT.left, rcRT.bottom, rcRT.right, rcRB.top); CRect rcBottom(rcLB.right, rcLB.top, rcRB.left, rcRB.bottom); if (rcLT.PtInRect(point)) return HTTOPLEFT; else if (rcLB.PtInRect(point)) return HTBOTTOMLEFT; else if (rcRT.PtInRect(point)) return HTTOPRIGHT; else if (rcRB.PtInRect(point)) return HTBOTTOMRIGHT; else if (rcLeft.PtInRect(point)) return HTLEFT; else if (rcTop.PtInRect(point)) return HTTOP; else if (rcRight.PtInRect(point)) return HTRIGHT; else if (rcBottom.PtInRect(point)) return HTBOTTOM; else return HTCAPTION; }
void JRenderServer::SetViewport( const Frame& rc ) { if (!m_pDevice) return; // clip viewport to the render target size Frame vp = rc; Frame rcRT( Frame::null ); if (m_RTID == -1) { rcRT.w = float( m_PresParam.BackBufferWidth ); rcRT.h = float( m_PresParam.BackBufferHeight ); } else { rcRT.w = float( m_Textures[m_RTID].m_Prop.m_Width ); rcRT.h = float( m_Textures[m_RTID].m_Prop.m_Height ); } vp.Clip( rcRT ); if (vp.w < 1.0f || vp.h < 1.0f) { return; } m_Viewport = vp; D3DVIEWPORT8 dvp; dvp.X = m_Viewport.x; dvp.Y = m_Viewport.y; dvp.Width = m_Viewport.w; dvp.Height = m_Viewport.h; dvp.MinZ = 0.0f; dvp.MaxZ = 1.0f; m_pDevice->SetViewport( (D3DVIEWPORT8*)&dvp ); } // JRenderServer::SetViewport
LRESULT CElcSkinFrameBase::NcHitTest(CPoint point) { GetOppositePoint(point); if (::IsIconic(m_hDerive)) { CRect rc; for (CFrameButtonArray::iterator it = m_arrButton.begin(); it != m_arrButton.end(); it ++) { if (it->type >= ESNWT_CUSTOM_BASE) continue; rc = CalcPos(it->pButton); if (rc.PtInRect(point)) { return it->type; } } if (m_bHasIcon) { rc.left = FRAME_ICON_MARGIN + FRAME_ICON_MARGIN; rc.right = rc.left + FRAME_ICON_SIZE; rc.top = (m_nCaption - FRAME_ICON_SIZE) / 2; rc.bottom = rc.top + FRAME_ICON_SIZE; if (rc.PtInRect(point)) return HTSYSMENU; } } else { CRect rcClient, rc; rcClient.left = m_rect.left + m_nLeft; rcClient.right = m_rect.right - m_nRight; rcClient.top = m_rect.top + m_nCaption + m_nMenuBar; rcClient.bottom = m_rect.bottom - m_nCaption; CRect rcLT(0, 0, RESIZE_BRODER, RESIZE_BRODER); CRect rcLB(0, m_rect.bottom-m_nBottom, m_nLeft, m_rect.bottom); CRect rcRT(m_rect.right-m_nRight, 0, m_rect.right, m_nRight); CRect rcRB(m_rect.right-m_nRight, m_rect.bottom-m_nBottom, m_rect.right, m_rect.bottom); CRect rcLeft(rcLT.left, rcLT.bottom, rcLT.right, rcLB.top); CRect rcTop(rcLT.right, rcLT.top, rcRT.left, rcLT.top+RESIZE_BRODER); CRect rcRight(rcRT.left, rcRT.bottom, rcRT.right, rcRB.top); CRect rcBottom(rcLB.right, rcLB.top, rcRB.left, rcRB.bottom); LONG style = GetWindowLong(m_hDerive, GWL_STYLE); if (rcClient.PtInRect(point)) { return HTCLIENT; } else { if (style & WS_THICKFRAME) { LRESULT lRet = TrackBorderHitTest(point); if (lRet != HTCAPTION) return lRet; } for (CFrameButtonArray::iterator it = m_arrButton.begin(); it != m_arrButton.end(); it ++) { rc = CalcPos(it->pButton); if (rc.PtInRect(point)) { return it->type; } } if (m_nMenuBar > 0) { rc = m_rect; rc.top = m_nCaption; rc.bottom = m_nCaption + m_nMenuBar; if (rc.PtInRect(point)) return HTMENU; } if (m_bHasIcon) { rc.left = FRAME_ICON_MARGIN + FRAME_ICON_MARGIN; rc.right = rc.left + FRAME_ICON_SIZE; rc.top = (m_nCaption - FRAME_ICON_SIZE) / 2; rc.bottom = rc.top + FRAME_ICON_SIZE; if (rc.PtInRect(point)) return HTSYSMENU; } } } return HTCAPTION; }