void CALLBACK CWebVideoCtrl::DrawFunctionString(LONG lRealHandle, HWND hDC, LPVOID lpUser) { CRect rect; int i = 0; HDC hDc= (HDC)hDC; CFont font; LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); lf.lfHeight =50; font.CreateFontIndirect(&lf); ::SelectObject(hDc,&font); CWebVideoCtrl* webvideo = (CWebVideoCtrl*)lpUser; int x,y; for (i=0;i<webvideo->m_bDrawRect.size();i++) { rect.left=webvideo->m_bDrawRect[i].left; rect.top = webvideo->m_bDrawRect[i].top; rect.right = webvideo->m_bDrawRect[i].right; rect.bottom = webvideo->m_bDrawRect[i].bottom; x=rect.left; y=rect.top; ::Rectangle(hDc,rect.left,rect.top,rect.right,rect.bottom); ::DrawText(hDc,webvideo->m_bDrawString[i],webvideo->m_bDrawString[i].length,&rect,DT_SINGLELINE|DT_LEFT|DT_VCENTER); } }
进行写一个在cwnd上一个矩形框内输入文字的程序,发现这样写怎么也改变不了字体的带下。google无果。
后来把HDC转成cdc竟然成功了。
void CALLBACK CWebVideoCtrl::DrawFunctionString(LONG lRealHandle, HWND hDC, LPVOID lpUser) { CRect rect; int i = 0; //HBRUSH hBrush= (HBRUSH)CreateSolidBrush(); //hwnd = m_picDetectArea.GetSafeHwnd(); HDC hDc= (HDC)hDC; CDC cdc; cdc.Attach(hDc); CFont font; LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); lf.lfHeight =50; font.CreateFontIndirect(&lf); cdc.SelectObject(&font); //::SelectObject(hDc,GetStockObject(NULL_BRUSH)); CWebVideoCtrl* webvideo = (CWebVideoCtrl*)lpUser; //HPEN hRedPen; //hRedPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); //HPEN hPenOld = (HPEN)::SelectObject(hDc, hRedPen); //::SetTextColor(hDc,RGB(0, 0, 255)); //::SetBkMode(hDc,TRANSPARENT); int x,y; for (i=0;i<webvideo->m_bDrawRect.size();i++) { rect.left=webvideo->m_bDrawRect[i].left; rect.top = webvideo->m_bDrawRect[i].top; rect.right = webvideo->m_bDrawRect[i].right; rect.bottom = webvideo->m_bDrawRect[i].bottom; x=rect.left; y=rect.top; //::TextOut(hDc,x,y,webvideo->m_bDrawString[i],webvideo->m_bDrawString[i].GetLength()); ::Rectangle(hDc,rect.left,rect.top,rect.right,rect.bottom); cdc.DrawText(webvideo->m_bDrawString[i],&rect,DT_SINGLELINE|DT_LEFT|DT_VCENTER); } //::DrawEdge(hDc,&rect,BDR_SUNKENOUTER,BF_RECT); }