132上位机VC MFC文字的任意角度旋转
132上位机VC MFC文字的任意角度旋转
功能展示
上位机程序中文字输入是常用的功能,如果输入的文字角度可任意变化,将会有很好的效果,修改十足,我们当前例程,实现输出文字角度的任意修改,效果如图; 要点提示 文字的角度可以使用VC中的Cfont字体类进行设置,然后在窗口输出文字时,用窗口的设备上下文CDC加载我们创建的Cfont字体,再输出文字,就可实现输出文本角度的任意设置了;
Cfont字体类的创建可以用CreateFont()函数,原型如下BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename ); nHeight, nWidth用于指定字体的高度和宽度,为正时,字体映射机制会根据指定的高度或宽度从字体列表中选择一种接近的字体,以该字体的单元高度或宽度为参考。为负时,字体的映射机制也会选择一种字体,这时以字体字符高度或宽度为参考。单元是在实际输出字符的上下有一些空隙,而字符是忽略了这些空隙后的单元高度; nEscapement以X横轴为参考确定文本的倾斜角度; nOrientation确定字符基线与X轴的倾斜角度; nWeight字体粗细; bItalic字体斜体, bUnderline字体下划线, cStrikeOut字体删除线; nCharSet指定字符集; nOutPrecision确定字体映射机制如何根据提供的参数选择合适的字体; nClipPrecision字体的裁减精度; nQuality字体显示品质; nPitchAndFamily字符间距和字体属性; lpszFacename 字体名称;
实现功能 1.新建基于对话框的应用程序 2.拖拽的图片控件用于设置输出的旋转文本,修改ID为IDC_RECT,类型为矩形; 3.拖拽一编辑框用于设置输出字体的任意角度,关联内容改变消息函数; 4.拖拽一按钮控件用于输出360度角度的字体; 5.添加自定义函数CGkbc8Dlg::RotateText(UINT nDegree)实现旋转字体的输出功能;
三个函数的函数体为 - void CGkbc8Dlg::OnChangeEdit1()
- {
- CRect rc;
- GetDlgItem(IDC_RECT)->GetClientRect(rc);
- CDC* pDC = GetDlgItem(IDC_RECT)->GetDC();
- pDC->FillRect(rc,&CBrush(RGB(0,0,0)));
- GetDlgItem(IDC_RECT)->ReleaseDC(pDC);
- RotateText(GetDlgItemInt(IDC_EDIT1));
- }
- void CGkbc8Dlg::OnButton1()
- { CRect rc;
- GetDlgItem(IDC_RECT)->GetClientRect(rc);
- CDC* pDC = GetDlgItem(IDC_RECT)->GetDC();
- pDC->FillRect(rc,&CBrush(RGB(0,0,0)));
- GetDlgItem(IDC_RECT)->ReleaseDC(pDC);
- for (int i = 1;i< 360;i+=18) {RotateText(i);}
- }
复制代码- void CGkbc8Dlg::RotateText(UINT nDegree)
- {
- CDC* pDC = GetDlgItem(IDC_RECT)->GetDC();
- pDC->SetBkMode(TRANSPARENT);
- CRect rc;
- GetDlgItem(IDC_RECT)->GetClientRect(rc);
- pDC->SetViewportOrg(rc.Width()/2,rc.Height()/2);
-
- CFont Font;
- Font.CreateFont(-14,-10,nDegree*10,0,600,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
- CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_ROMAN,"宋体");
- pDC->SelectObject(&Font);
- nDegree=nDegree%255;
- pDC->SetTextColor(RGB(255-nDegree,(255+nDegree)%255,255));
- pDC->TextOut(0,0,"文字任意旋转例程");
- //
- Font.DeleteObject();
- GetDlgItem(IDC_RECT)->ReleaseDC(pDC);
- }
复制代码我们来演示下功能实现的整个过程
|