|
我自己写了个控件通过下面的使正交投影设置到2D窗口中,但是当我用鼠标检测与控件矩形相交时老是有那么一点误差
是我下面的设置有问题吗?还是我使用的检测相交方法有问题,我用的是windows.h中的点与矩形相交方法PtInRect()按道理来说,下面的设置已经把窗口左上交原点设置为0,0点控件在窗口2D中能正常的显示位置,但是就是与鼠标相交老是有一点误差。还有就是我已经把客户区设置为实际宽高度(除去标题栏,和边框),但是还是不行,,,这使为什么?
VOID _Set2DVPMatrix()
{
D3DXMATRIX matOrtho;
D3DXMATRIX matIdentity;
D3DXMatrixIdentity(&matIdentity);
D3DXMatrixOrthoLH(&matOrtho, 1.0f*m_ClientW, 1.0f*m_ClientH, 0.0f, 1000.0f);
m_Device->SetTransform(D3DTS_PROJECTION, &matOrtho);
m_Device->SetTransform(D3DTS_WORLD, &matIdentity);
matIdentity._22= -1;
matIdentity._41= -m_ClientW/2.0f;
matIdentity._42=m_ClientH/2.0f;
m_Device->SetTransform(D3DTS_VIEW, &matIdentity);
}
//下面是控件的检测方法z轴我已经设置为0
RECT r = {m_x, m_y, m_x + m_Width, m_y + m_Height};
POINT pMouse;
GetCursorPos( &pMouse);
ScreenToClient(hWnd,&pMouse);
PtInRect(&r, pMouse)
//下面是控件绘制部分,
D3DXMATRIX matWorld;
D3DXMatrixTranslation(&matWorld,m_x,m_y, 0.0f);
matWorld._11=m_Width;
matWorld._22=m_Height;
m_Device->SetTransform(D3DTS_WORLD,&matWorld);
m_Device->SetFVF(D3DFVF_SCREENOBJECT);
m_Device->SetStreamSource(0,m_pVB,0,sizeof(VERTEX_CUSTOM));
m_Device->SetTexture(0,m_Texture[m_CurrTexInx]);
m_Device->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
//请大家赐教了 |
|