绘制镜像字体

来源:互联网 发布:苹果蜂窝移动数据清零 编辑:程序博客网 时间:2024/06/11 18:05
//绘制镜像字体void Draw_Mirror_Text(CDC *pDst_DC,//目标设备句柄   CPoint dst_Point,//目标位置    LPCTSTR drawText,//目标字符串    COLORREF textColor, //字体颜色    bool Mirror_X,//X轴镜像    bool Mirror_Y //Y轴镜像  ){  if(pDst_DC && pDst_DC->m_hDC) //设备句柄有效    {       //创建兼容内存设备    CDC memDC;    memDC.CreateCompatibleDC(pDst_DC);    int saveDC = memDC.SaveDC(); //保存设备状态        //获取字符串大小    CSize text_size = memDC.GetTextExtent(drawText);    CRect rect(0,0,text_size.cx,text_size.cy);     //创建兼容位图    CBitmap bitmap;    bitmap.CreateCompatibleBitmap(pDst_DC,rect.Width(),rect.Height());    CBitmap *pBitmap = memDC.SelectObject(&bitmap); //选入位图    //填充白色背景色    CBrush brush(RGB(255,255,255));    memDC.FillRect(rect,&brush);    //正常模式绘制字体    int saveMode = memDC.SetMapMode(MM_TEXT);    int savebkMode = memDC.SetBkMode(TRANSPARENT);//不更改背景色    COLORREF saveTextColor = memDC.SetTextColor(textColor);//设置字体颜色    memDC.TextOut(0,0,drawText);//绘制字体    memDC.SetTextColor(saveTextColor);//恢复字体颜色    memDC.SetBkMode(savebkMode);//恢复映射模式        //主要是用SetViewportExt 和 SetViewportOrg 做坐标翻转    memDC.SetMapMode(MM_ISOTROPIC);    CSize saveWindowExt  = memDC.SetWindowExt(1,1);    int vp_cx = 1,vp_cy = 1;    if(Mirror_X) vp_cx = -1;    if(Mirror_Y) vp_cy = -1;    CSize saveViewport = memDC.SetViewportExt(vp_cx,vp_cy);    int vporg_x = 0,vporg_y = 0;    if(Mirror_X)vporg_x = rect.Width()-1;    if(Mirror_Y)vporg_y = rect.Height()-1;    CPoint saveViewportOrg = memDC.SetViewportOrg(vporg_x,vporg_y);    //贴图到目标设备的目标位置    pDst_DC->BitBlt(dst_Point.x,dst_Point.y,rect.Width(),rect.Height(),&memDC,0,0,SRCAND);    //恢复内存设备信息    memDC.SetViewportOrg(saveViewportOrg);    memDC.SetViewportExt(saveViewport);    memDC.SetWindowExt(saveWindowExt);    memDC.SetMapMode(saveMode);    //释放对象 销毁内存设备    memDC.SelectObject(pBitmap);    bitmap.DeleteObject();    memDC.RestoreDC(saveDC);    memDC.DeleteDC();  }}


 

原创粉丝点击