如何才能旋转90度进行编辑

z_j 2012-12-23 02:30:53
有个项目需要做旋转90度后进行编辑,如图

请大家给个思路,谢谢
...全文
259 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-04-07
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
schlafenhamster 2013-01-10
  • 打赏
  • 举报
回复
改变一下思路, 先编辑后 旋转。 因为 有些 嵌入式 要求 字符 是 旋转90 度的。 这样 编辑 容易, 编辑人也 看的 清楚。
Eleven 2013-01-10
  • 打赏
  • 举报
回复
恐怕你得完全自绘实现编辑框的效果,包含那个插入光标的样式
z_j 2013-01-10
  • 打赏
  • 举报
回复
感谢各位的帮助。 但上面的办法不是我需要的, 需要的重点在于“编辑”,而不是显示,要显示旋转的文字是简单的,关键是要能编辑
潇潇雨云 2012-12-25
  • 打赏
  • 举报
回复

void CChildView::OnPaint()
{
CPaintDC dc(this);// device context for painting
/////// 利用CFont::CreateFont(...)函数实现竖写汉字////////
CFont myFont; //创建字体对象
//创建逻辑字体
myFont.CreateFont(
              56, //字体高度(旋转后的字体宽度)=56
              20, //字体宽度(旋转后的字体高度)=20
              2700, //字体显示角度=270°
              0, //nOrientation=0
              10, //字体磅数=10
              FALSE, //非斜体
              FALSE, //无下划线
              FALSE, //无删除线
              DEFAULT_CHARSET, //使用缺省字符集
              OUT_DEFAULT_PRECIS, //缺省输出精度
              CLIP_DEFAULT_PRECIS,//缺省裁减精度
              DEFAULT_QUALITY, //nQuality=缺省值
              DEFAULT_PITCH, //nPitchAndFamily=缺省值
              "@system"); //字体名=@system
CFont *pOldFont=dc.SelectObject(&myFont);//选入设备描述表
CRect rtClient;
GetClientRect(rtClient); //获取客户区尺寸、位置信息
//在客户区适当位置输出文字
dc.TextOut(rtClient.Width()/2+30,rtClient.Height()/8,
"无边落木萧萧下");
dc.SelectObject(pOldFont); //将myFont从设备环境中分离
myFont.DeleteObject(); //删除myFont对象
/////////// 利用LOGFONT结构实现竖写汉字//////////////
LOGFONT lf; //定义字体结构
lf.lfWeight=10; //字体磅数=10
lf.lfHeight=56; //字体高度(旋转后的字体宽度)=56
lf.lfWidth=20; //字体宽度(旋转后的字体高度)=20
lf.lfUnderline=FALSE; //无下划线
lf.lfStrikeOut=FALSE; //无删除线
lf.lfItalic=FALSE; //非斜体
lf.lfEscapement=2700; //字体显示角度=270°
lf.lfCharSet=DEFAULT_CHARSET; //使用缺省字符集
strcpy(lf.lfFaceName,"@system"); //字体名=@system
CFont myLogFont; //定义字体对象
myLogFont.CreateFontIndirect(&lf); //创建逻辑字体
pOldFont=dc.SelectObject(&myLogFont);//选入设备描述表
//在客户区适当位置输出文字
dc.TextOut(rtClient.Width()/2-30,rtClient.Height()/8,
"不尽长江滚滚来");
dc.SelectObject(pOldFont); //将myFont从设备环境中分离
myLogFont.DeleteObject(); //删除myLogFont对象
}


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 //字体名称
);

  其中nEscapement单位为0.1角度,方向为逆时针,所以为了使平躺的字立起来应设定其值为2700,lpszFacename则赋以“@”开头的字集的名称,如“@system”。
fishion 2012-12-25
  • 打赏
  • 举报
回复
。。不知道有没有记错了。。哈哈
fishion 2012-12-25
  • 打赏
  • 举报
回复
如果只是字体旋转的话,可以用CreateFont等创建选择字体,字体的lpszFacename 类型里都加上@ 例如“@宋体”
夫人的泡泡鱼 2012-12-24
  • 打赏
  • 举报
回复
楼上确实可以实现但是要改几处:stFont.lfHeight=MulDiv (14, -pDC->GetDeviceCaps (LOGPIXELSY), 72);stFont.lfWeight=FW_NORMAL;stFont.lfClipPrecision=LCIP_LH_ANGLES; //Draw the text. pDC->DrawText(str,CRect(0,0,200,200),DT_CENTER); pDC->SelectObject (pOldFont); font.DelectObject ();
夫人的泡泡鱼 2012-12-24
  • 打赏
  • 举报
回复
楼上确实可以实现但是要改几处:stFont.lfHeight=MulDiv (14, -pDC->GetDeviceCaps (LOGPIXELSY), 72)
傻X 2012-12-24
  • 打赏
  • 举报
回复
前任大版主laiyiling的回答 如何显示旋转文本 只要用户使用TrueType或者GDI笔或字体就可以显示旋转文本(有些硬件设备也支持旋 转光栅字体)。LOGFONT 结构中的ifEscapement 成员指定了文本行和x 轴的角度,角度 的单位是十分之一度而不是度,例如,ifEscapement 为450 表示字体旋转45度。为确 保所有的字体沿坐标系统的同一方向旋转,一定要设置ifEscapement 成员的 CLIP_LH_ANGLES位,否则,有些字体可能反向旋转。下例使用了14点Arial字体每间 隔15度画一个串。

void CSampleView:: OnDraw (CDC* pDC)
{
//Determine the size of the window.
CRect rcClient;
GetClientRect (rcClient);
//Create sample string.
CString str (_T ("Wheeee...I am rotating!"));
//Draw transparent, red text.
pDC->SetBkMode (TRANSPARENT);
pDC->SetTextColor (RGB (255,0,0));
CFont font; //font object
LOGFONT stFont; //font definition
//Set font attributes that will not change.
memset (&stFont, 0, sizeof (LOGFONT));
stFont.ifheight=MulDiv (14, -pDC->GetDeviceCaps (LOGPIXELSY), 72);
stFont.ifWeight=FW_NORMAL;
stFont.ifClipPrecision=LCIP_LH_ANGLES;
strcpy (stFont.lfFaceName, "Arial");
//Draw text at 15degree intervals.
for (int nAngle=0; nAngle<3600; nAngle+=150)
{
//Specify new angle.
stFont.lfEscapement=nAngle;
//Create and select font into dc.
font.CreateFontIndirect (&stfont);
CFont* pOldFont=pDC->SelectObject (&font);
//Draw the text.
pDC->SelectObject (pOldFont);
font.DelectObjext ();
}
}

MoreWindows 2012-12-24
  • 打赏
  • 举报
回复
具体没做个。不过我记得设置字体函数CreateFont可以设置字体的旋转角度。楼主你设置字体的角度为90度试试看。 CreateFont原型如下: HFONT CreateFont( int nHeight, // height of font int nWidth, // average character width int nEscapement, // angle of escapement int nOrientation, // base-line orientation angle int fnWeight, // font weight DWORD fdwItalic, // italic attribute option DWORD fdwUnderline, // underline attribute option DWORD fdwStrikeOut, // strikeout attribute option DWORD fdwCharSet, // character set identifier DWORD fdwOutputPrecision, // output precision DWORD fdwClipPrecision, // clipping precision DWORD fdwQuality, // output quality DWORD fdwPitchAndFamily, // pitch and family LPCTSTR lpszFace // typeface name ); MSDN上有详细说明和示例。

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧