CXTPMarkupInputElement* CXTPMarkupVisual::InputHitTest(CPoint point) const { CPoint ptVisualPoint = point - m_ptVisualOffset; if (!m_rcBoundRect.PtInRect(ptVisualPoint)) return NULL; CRect rcClip; if (GetLayoutClip(rcClip)) { if (!rcClip.PtInRect(ptVisualPoint)) return NULL; } int nVisualCount = GetVisualChildrenCount(); for (int i = nVisualCount - 1; i >= 0; i--) { CXTPMarkupInputElement* pObject = GetVisualChild(i)->InputHitTest(ptVisualPoint); if (pObject) return pObject; } CRect rcRender(0, 0, m_szRenderSize.cx, m_szRenderSize.cy); if (!rcRender.PtInRect(ptVisualPoint)) return NULL; return InputHitTestOverride(ptVisualPoint); }
void CTexViewer::Render() { if (NULL == m_pTex) return; CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd(); CN3EngTool* pEng = &(pFrm->m_Eng); LPDIRECT3DDEVICE9 lpD3DDev = pEng->s_lpD3DDev; // backup render state DWORD dwZEnable, dwAlphaBlend, dwSrcBlend, dwDestBlend, dwFog; lpD3DDev->GetRenderState(D3DRS_ZENABLE, &dwZEnable); lpD3DDev->GetRenderState(D3DRS_ALPHABLENDENABLE, &dwAlphaBlend); lpD3DDev->GetRenderState(D3DRS_SRCBLEND, &dwSrcBlend); lpD3DDev->GetRenderState(D3DRS_DESTBLEND, &dwDestBlend); lpD3DDev->GetRenderState(D3DRS_FOGENABLE, &dwFog); DWORD dwMagFilter, dwMinFilter, dwMipFilter; lpD3DDev->GetSamplerState(0, D3DSAMP_MAGFILTER, &dwMagFilter);//lpD3DDev->GetTextureStageState(0, D3DTSS_MAGFILTER, &dwMagFilter); lpD3DDev->GetSamplerState(0, D3DSAMP_MINFILTER, &dwMinFilter);//lpD3DDev->GetTextureStageState(0, D3DTSS_MINFILTER, &dwMinFilter); lpD3DDev->GetSamplerState(0, D3DSAMP_MIPFILTER, &dwMipFilter);//lpD3DDev->GetTextureStageState(0, D3DTSS_MIPFILTER, &dwMipFilter); // set render state if (D3DZB_FALSE != dwZEnable) lpD3DDev->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); if (FALSE != dwAlphaBlend) lpD3DDev->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE); if (FALSE != dwFog) lpD3DDev->SetRenderState(D3DRS_FOGENABLE , FALSE); // 2d도 fog를 먹는다 ㅡ.ㅡ; if (D3DTEXF_POINT != dwMagFilter) lpD3DDev->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT); //lpD3DDev->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_POINT); if (D3DTEXF_POINT != dwMinFilter) lpD3DDev->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT); //lpD3DDev->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_POINT); if (D3DTEXF_NONE != dwMipFilter) lpD3DDev->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE); //lpD3DDev->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTEXF_NONE); lpD3DDev->SetTexture(0, m_pTex->Get()); lpD3DDev->SetTexture(1, NULL); lpD3DDev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); lpD3DDev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); lpD3DDev->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE); // 그림 위치와 배율등을 고려해서 계산 CRect rcRender(0,0, m_TexSize.cx*m_fScale, m_TexSize.cy*m_fScale); rcRender.OffsetRect(-m_ptLeftTopInImage.x*m_fScale, -m_ptLeftTopInImage.y*m_fScale); static __VertexTransformed Vertices[4]; const float z = 0.9f; const float rhw = 1.0f; const D3DCOLOR color = 0xffffffff; Vertices[0].Set((float)rcRender.left, (float)rcRender.top, z, rhw, color, 0.0f, 0.0f); Vertices[1].Set((float)rcRender.right, (float)rcRender.top, z, rhw, color, 1.0f, 0.0f); Vertices[2].Set((float)rcRender.right, (float)rcRender.bottom, z, rhw, color, 1.0f, 1.0f); Vertices[3].Set((float)rcRender.left, (float)rcRender.bottom, z, rhw, color, 0.0f, 1.0f); // 그리기 lpD3DDev->SetFVF(FVF_TRANSFORMED);//lpD3DDev->SetVertexShader(FVF_TRANSFORMED); HRESULT hr = lpD3DDev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, Vertices, sizeof(Vertices[0])); // restore if (D3DZB_FALSE != dwZEnable) lpD3DDev->SetRenderState(D3DRS_ZENABLE, dwZEnable); if (FALSE != dwAlphaBlend) lpD3DDev->SetRenderState(D3DRS_ALPHABLENDENABLE, dwAlphaBlend); if (FALSE != dwFog) lpD3DDev->SetRenderState(D3DRS_FOGENABLE , dwFog); if (D3DTEXF_POINT != dwMagFilter) lpD3DDev->SetSamplerState(0, D3DSAMP_MAGFILTER, dwMagFilter);//lpD3DDev->SetTextureStageState(0, D3DTSS_MAGFILTER, dwMagFilter); if (D3DTEXF_POINT != dwMinFilter) lpD3DDev->SetSamplerState(0, D3DSAMP_MINFILTER, dwMinFilter);//lpD3DDev->SetTextureStageState(0, D3DTSS_MINFILTER, dwMinFilter); if (D3DTEXF_NONE != dwMipFilter) lpD3DDev->SetSamplerState(0, D3DSAMP_MIPFILTER, dwMipFilter);//lpD3DDev->SetTextureStageState(0, D3DTSS_MIPFILTER, dwMipFilter); }