为了方便,就直接在视频上显示了,而没有动态的输出文字和用鼠标移动画线,不过是一样的原理,只是动态就要捕获鼠标状态的消息
LONG cx, cy; HRESULT hr; hr = pWC->GetNativeVideoSize(&cx, &cy, NULL, NULL); if (FAILED(hr)) { Msg(TEXT("GetNativeVideoSize FAILED! hr=0x%x\r\n"), hr); return hr; } HDC hdc = GetDC(hwndApp); HDC hdcBmp = CreateCompatibleDC(hdc); g_hFont=CreateFont(30, 10,0,0, 10, FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,_T("宋体")); HFONT hOldFont = (HFONT) SelectObject(hdcBmp, g_hFont); HPEN hPen=CreatePen(PS_SOLID,1,RGB(255,0,0)); HPEN hOldPen = (HPEN) SelectObject(hdcBmp, hPen); int nLength, nTextBmpWidth, nTextBmpHeight; SIZE sz={0}; nLength = (int) _tcslen(szNewText); GetTextExtentPoint32(hdcBmp, szNewText, nLength, &sz); nTextBmpHeight = sz.cy; nTextBmpWidth = 400/*sz.cx*/; HBITMAP hbm = CreateCompatibleBitmap(hdc, nTextBmpWidth, nTextBmpHeight); ReleaseDC(hwndApp, hdc); BITMAP bm; HBITMAP hbmOld; GetObject(hbm, sizeof(bm), &bm); hbmOld = (HBITMAP)SelectObject(hdcBmp, hbm); RECT rcText; SetRect(&rcText, 0, 0, nTextBmpWidth, nTextBmpHeight); SetBkMode(hdcBmp,TRANSPARENT); //设置透明背景 SetTextColor(hdcBmp, g_rgbColors); // 文字颜色 HBRUSH hBrush=((HBRUSH)GetStockObject(NULL_BRUSH)); SelectObject(hdcBmp, hBrush); // 在位图上画图 //输出文字 //TextOut(hdcBmp, 0, 0, szNewText, nLength); DrawText(hdcBmp,szNewText,sizeof(szNewText),&rcText,DT_RIGHT); //画线 MoveToEx(hdcBmp,10,10,NULL); LineTo(hdcBmp,200,10); //Ellipse(hdcBmp,0,0,100,nTextBmpHeight); // Configure the VMR's bitmap structure VMRALPHABITMAP bmpInfo; ZeroMemory(&bmpInfo, sizeof(bmpInfo) ); bmpInfo.dwFlags = VMRBITMAP_HDC; bmpInfo.hdc = hdcBmp; g_nImageWidth = bm.bmWidth; g_fBitmapCompWidth = (float)g_nImageWidth / (float)cx; bmpInfo.rDest.left = 0.0f + X_EDGE_BUFFER; bmpInfo.rDest.right = 1.0f - X_EDGE_BUFFER; bmpInfo.rDest.top = (float)(cy - bm.bmHeight) / (float)cy - Y_EDGE_BUFFER; bmpInfo.rDest.bottom = 1.0f - Y_EDGE_BUFFER; bmpInfo.rSrc = rcText; bmpInfo.fAlpha = TRANSPARENCY_VALUE; SetColorRef(bmpInfo); hr = pBMP->SetAlphaBitmap(&bmpInfo); if (FAILED(hr)) Msg(TEXT("SetAlphaBitmap FAILED! hr=0x%x\r\n\r\n%s\0"), hr, STR_VMR_DISPLAY_WARNING); // Select the initial objects back into our device context DeleteObject(SelectObject(hdcBmp, hbmOld)); DeleteObject(SelectObject(hdcBmp, hOldPen)); SelectObject(hdc, hOldFont); DeleteObject(hbm); DeleteDC(hdcBmp); return hr;