mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
3.8 KiB
159 lines
3.8 KiB
//+----------------------------------------------------------------------------
|
|
//
|
|
// File: himetric.cpp
|
|
//
|
|
// Module: Connection Manager
|
|
//
|
|
// Synopsis: Routines to convert Pixels to Himetric and vice versa
|
|
//
|
|
// Copyright (c) 1998 Microsoft Corporation
|
|
//
|
|
// Author: nickball Created 02/10/98
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
|
|
#include "cmmaster.h"
|
|
|
|
#pragma hdrstop
|
|
|
|
|
|
#define HIMETRIC_PER_INCH 2540L
|
|
|
|
SIZE g_sizePixelsPerInch;
|
|
|
|
//+------------------------------------------------------------------------
|
|
//
|
|
// Function: InitPixelsPerInch
|
|
//
|
|
// Synopsis: Initializing coordinate mapping for screen pixels
|
|
//
|
|
// Returns: HRESULT; S_OK on success, E_OUTOFMEMORY otherwise
|
|
//
|
|
//-------------------------------------------------------------------------
|
|
|
|
void
|
|
InitPixelsPerInch(VOID)
|
|
{
|
|
HDC hdc;
|
|
|
|
hdc = GetDC(NULL);
|
|
if (!hdc)
|
|
goto Error;
|
|
|
|
g_sizePixelsPerInch.cx = GetDeviceCaps(hdc, LOGPIXELSX);
|
|
g_sizePixelsPerInch.cy = GetDeviceCaps(hdc, LOGPIXELSY);
|
|
|
|
ReleaseDC(NULL, hdc);
|
|
|
|
Cleanup:
|
|
return;
|
|
|
|
Error:
|
|
g_sizePixelsPerInch.cx = 96;
|
|
g_sizePixelsPerInch.cy = 96;
|
|
goto Cleanup;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------
|
|
//
|
|
// Function: HimetricFromHPix
|
|
//
|
|
// Synopsis: Converts horizontal pixel units to himetric units.
|
|
//
|
|
//----------------------------------------------------------------
|
|
|
|
long
|
|
HimetricFromHPix(int iPix)
|
|
{
|
|
if (!g_sizePixelsPerInch.cx)
|
|
InitPixelsPerInch();
|
|
|
|
return MulDiv(iPix, HIMETRIC_PER_INCH, g_sizePixelsPerInch.cx);
|
|
}
|
|
|
|
//+---------------------------------------------------------------
|
|
//
|
|
// Function: HimetricFromVPix
|
|
//
|
|
// Synopsis: Converts vertical pixel units to himetric units.
|
|
//
|
|
//----------------------------------------------------------------
|
|
|
|
long
|
|
HimetricFromVPix(int iPix)
|
|
{
|
|
if (!g_sizePixelsPerInch.cy)
|
|
InitPixelsPerInch();
|
|
|
|
return MulDiv(iPix, HIMETRIC_PER_INCH, g_sizePixelsPerInch.cy);
|
|
}
|
|
|
|
//+---------------------------------------------------------------
|
|
//
|
|
// Function: HPixFromHimetric
|
|
//
|
|
// Synopsis: Converts himetric units to horizontal pixel units.
|
|
//
|
|
//----------------------------------------------------------------
|
|
|
|
int
|
|
HPixFromHimetric(long lHi)
|
|
{
|
|
if (!g_sizePixelsPerInch.cx)
|
|
InitPixelsPerInch();
|
|
|
|
return MulDiv(g_sizePixelsPerInch.cx, lHi, HIMETRIC_PER_INCH);
|
|
}
|
|
|
|
//+---------------------------------------------------------------
|
|
//
|
|
// Function: VPixFromHimetric
|
|
//
|
|
// Synopsis: Converts himetric units to vertical pixel units.
|
|
//
|
|
//----------------------------------------------------------------
|
|
|
|
int
|
|
VPixFromHimetric(long lHi)
|
|
{
|
|
if (!g_sizePixelsPerInch.cy)
|
|
InitPixelsPerInch();
|
|
|
|
return MulDiv(g_sizePixelsPerInch.cy, lHi, HIMETRIC_PER_INCH);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: PixelFromHMRect
|
|
//
|
|
// Synopsis: Converts a Himetric RECTL to a Pixel RECT
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
void
|
|
PixelFromHMRect(RECT *prcDest, RECTL *prcSrc)
|
|
{
|
|
prcDest->left = HPixFromHimetric(prcSrc->left);
|
|
prcDest->top = VPixFromHimetric(prcSrc->top);
|
|
prcDest->right = HPixFromHimetric(prcSrc->right);
|
|
prcDest->bottom = VPixFromHimetric(prcSrc->bottom);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: HMFromPixelRect
|
|
//
|
|
// Synopsis: Converts a Pixel RECT to a Himetric RECTL
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
void
|
|
HMFromPixelRect(RECTL *prcDest, RECT *prcSrc)
|
|
{
|
|
prcDest->left = HimetricFromHPix(prcSrc->left);
|
|
prcDest->top = HimetricFromVPix(prcSrc->top);
|
|
prcDest->right = HimetricFromHPix(prcSrc->right);
|
|
prcDest->bottom = HimetricFromVPix(prcSrc->bottom);
|
|
}
|
|
|