Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}