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); } } }
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; }