void CPElement::RenderBehavior(Gdiplus::Graphics* pGraphics)
{
	for (int i = 0; i < m_behaviors.GetSize(); i++)
	{
		CComQIPtr<IHTMLPainter> htmlPainter = m_behaviors[i]->m_p;

		if (htmlPainter)
		{
			CRect rcBounds(0, 0, 400, 400);	// TODO
			CRect rcUpdate(0, 0, 400, 400);	// TODO

			long lDrawFlags = 0;	// HTMLPAINT_DRAW_UPDATEREGION = 0x000001,
								  //  HTMLPAINT_DRAW_USE_XFORM = 0x000002

			HDC hDC = pGraphics->GetHDC();
	
			//CPoint oldOrg;
			//OffsetViewportOrgEx(hDC, -pC->m_clipBox.left, -pC->m_clipBox.top, &oldOrg);

			htmlPainter->Draw(rcBounds, rcUpdate, lDrawFlags, hDC, NULL);

			//SetViewportOrgEx(hDC, oldOrg.x, oldOrg.y, NULL);

			pGraphics->ReleaseHDC(hDC);
		}
	}
}
示例#2
0
文件: Drawing.cpp 项目: coolbole/OGDC
BOOL CDrawing::DrawRasterBlock(CDC* pDC, OgdcRasterBlock* pIBlock, OgdcDatasetRaster* pDatasetR, BITMAPINFO* pBitMapInfo)
{
    OGDCASSERT(pIBlock != NULL);
    if(pIBlock->m_nValidWidth < 2 || pIBlock->m_nValidHeight < 2)
    {
        return FALSE;
    }

    pBitMapInfo->bmiHeader.biWidth = pIBlock->m_nWidth;
    pBitMapInfo->bmiHeader.biHeight = pIBlock->m_nValidHeight;

    OgdcRect2D rcBlockBounds = pIBlock->m_rcBounds;
    OgdcPoint2D pnts[2];
    pnts[0] = rcBlockBounds.TopLeft();
    pnts[1] = rcBlockBounds.BottomRight();

    CPoint* pPoints = NULL;
    GeoToDevice(pnts, 2, pPoints);
    CRect rcBounds(pPoints[0], pPoints[1]);
    delete[] pPoints;
    pPoints = NULL;
    rcBounds.NormalizeRect();

    OgdcRasterBlock* pDemBlock = NULL;
    BYTE* pByte = NULL;
    // DEM或者GRID
    if(pDatasetR->GetType() == OgdcDataset::Grid
            && pDatasetR->GetPixelFormat() != IPF_MONO)
    {
        pDemBlock = new OgdcRasterBlock;

        // 象素信息 ImgBlockInfo
        pDemBlock->m_nPixelFormat = IPF_RGB;
        pDemBlock->m_nWidth = pIBlock->m_nWidth;				// 宽度.
        pDemBlock->m_nHeight = pIBlock->m_nHeight;				// 高度.
        pDemBlock->m_nWidthBytes = ((3*pIBlock->m_nWidth+3)/4)*4;
        pDemBlock->m_nValidWidth = pIBlock->m_nValidWidth;		// 有效宽度
        pDemBlock->m_nValidHeight = pIBlock->m_nValidHeight;	// 有效高度
        pDemBlock->m_rcBounds = pIBlock->m_rcBounds;			// 地理坐标参照.
        pDemBlock->m_bInited = pIBlock->m_bInited;				// 是否正在初始化,如是,将不装入数据.

        OgdcInt nSize = pDemBlock->m_nWidthBytes * pDemBlock->m_nHeight;
        pDemBlock->SetByteSize(nSize);

        COLORREF clrPixel = 0;
        OgdcDouble dZ = 0.0;
        OgdcInt nValue = 0;
        OgdcInt i = 0;
        OgdcInt y = 0;
        OgdcDouble dNoValue = OGDCROUND(pDatasetR->m_info.m_dNoValue);
        OgdcColorTable *pColorTable = &pDatasetR->m_colorTable;

        for(y = 0; y < pDemBlock->m_nValidHeight; y++)
        {
            OgdcInt x = 0;
            for(x = 0; x < pDemBlock->m_nValidWidth; x++)
            {
                dZ = pIBlock->GetValue(x,y);
                if(OGDCIS0(dZ - dNoValue))
                {
                    clrPixel = RGB(255,255,255);
                }
                else
                {
                    clrPixel = pColorTable->GetColor(dZ);
                }
                pDemBlock->SetPixel(x,y,clrPixel);
            }
        }
        pBitMapInfo->bmiHeader.biBitCount = IPF_RGB;
        pByte = (BYTE*)pDemBlock->GetBlockData();
    }
    else // 普通的Image
    {
        pByte = (BYTE*)pIBlock->GetBlockData();
    }

    int  nOldBltMode = pDC->SetStretchBltMode(COLORONCOLOR);
    BOOL bResult = StretchDIBits(pDC->m_hDC, rcBounds.left, rcBounds.bottom, rcBounds.Width(), -rcBounds.Height(),
                                 0, 0, pIBlock->m_nValidWidth, pIBlock->m_nValidHeight, pByte, pBitMapInfo, DIB_RGB_COLORS, SRCCOPY);

    pDC->SetStretchBltMode(nOldBltMode);

    if(pDemBlock != NULL)
    {
        delete pDemBlock;
        pDemBlock = NULL;
    }
    pByte = NULL;
    return bResult;
}