windows-nt/Source/XPSP1/NT/windows/richedit/re41/devdsc.cpp
2020-09-26 16:20:57 +08:00

114 lines
2.2 KiB
C++

/*
* DEVDSC.C
*
* Purpose:
* CDevDesc (Device Descriptor) class
*
* Owner:
* Original RichEdit code: David R. Fulmer
* Christian Fortini
* Murray Sargent
*/
#include "_common.h"
#include "_devdsc.h"
#include "_edit.h"
#include "_font.h"
ASSERTDATA
BOOL CDevDesc::SetDC(HDC hdc, LONG dxpInch, LONG dypInch)
{
TRACEBEGIN(TRCSUBSYSDISP, TRCSCOPEINTERN, "CDevDesc::SetDC");
AssertSz((NULL == hdc) || (GetDeviceCaps(hdc, TECHNOLOGY) != DT_METAFILE),
"CDevDesc::SetDC attempting to set a metafile");
_hdc = hdc;
if(!_hdc)
{
if(!_ped->_fInPlaceActive || !(hdc = _ped->TxGetDC()))
{
_dxpInch = _dypInch = 0;
return FALSE;
}
}
if (dxpInch == -1)
{
// Get device metrics - these should both succeed
_dxpInch = (SHORT)GetDeviceCaps(hdc, LOGPIXELSX);
AssertSz(_dxpInch != 0, "CDevDesc::SetDC _dxpInch is 0");
}
else
_dxpInch = dxpInch;
if (dypInch == -1)
{
_dypInch = (SHORT)GetDeviceCaps(hdc, LOGPIXELSY);
AssertSz(_dypInch != 0, "CDevDesc::SetDC _dypInch is 0");
}
else
_dypInch = dypInch;
if(!_dxpInch || !_dypInch)
return FALSE;
// Release DC if we got the window DC
if(!_hdc)
_ped->TxReleaseDC(hdc);
return TRUE;
}
void CDevDesc::SetMetafileDC(
HDC hdcMetafile,
LONG xMeasurePerInch,
LONG yMeasurePerInch)
{
_fMetafile = TRUE;
_hdc = hdcMetafile;
_dxpInch = (SHORT) xMeasurePerInch;
_dypInch = (SHORT) yMeasurePerInch;
}
HDC CDevDesc::GetScreenDC() const
{
TRACEBEGIN(TRCSUBSYSDISP, TRCSCOPEINTERN, "CDevDesc::GetScreenDC");
Assert(!_hdc);
Assert(_ped);
return _ped->TxGetDC();
}
VOID CDevDesc::ReleaseScreenDC(HDC hdc) const
{
TRACEBEGIN(TRCSUBSYSDISP, TRCSCOPEINTERN, "CDevDesc::ReleaseScreenDC");
Assert(!_hdc);
Assert(_ped);
_ped->TxReleaseDC(hdc);
}
void CDevDesc::LRtoDR(RECT &rcDest, const RECT &rcSrc, TFLOW tflow) const
{
TRACEBEGIN(TRCSUBSYSDISP, TRCSCOPEINTERN, "CDevDesc::LRtoDR");
if (!IsUVerticalTflow(tflow))
{
rcDest.left = LXtoDX(rcSrc.left);
rcDest.right = LXtoDX(rcSrc.right);
rcDest.top = LYtoDY(rcSrc.top);
rcDest.bottom = LYtoDY(rcSrc.bottom);
}
else
{
rcDest.left = LYtoDY(rcSrc.left);
rcDest.right = LYtoDY(rcSrc.right);
rcDest.top = LXtoDX(rcSrc.top);
rcDest.bottom = LXtoDX(rcSrc.bottom);
}
}