如何获取每个字符的像素位置呢?

WJN92 2017-12-17 03:50:42
我想自己编写一个textbox在DX里面
字符的渲染什么的都好办
但是最后的一个功能出现麻烦了,那就是鼠标点击定位到字符的问题
ComPtr<IDWriteTextFormat> m_textFormat 里面好像没有提供任何计算字符位置的函数。
而且像“WWWiiii” 这样的字符串每个字符的宽度是不一样的,这样就没办法推算出来。
大家有什么办法呢?
...全文
384 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2017-12-18
  • 打赏
  • 举报
回复
用 tmAveCharWidth; 平均宽度 估计
schlafenhamster 2017-12-17
  • 打赏
  • 举报
回复
RichEdit.getCharFromPosition

void CDbgViewView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CRect rc;
	GetClientRect(rc);
	rc.right=m_leftMargin;
	if(rc.PtInRect(point))
	{
		CEdit &edit=GetEditCtrl();
		int line= HIWORD (edit.CharFromPos(point));//edit.LineFromChar(idx);
		AddBreakLine(line);
#ifdef _DEBUG
		afxDump << line << "\n";
		char buf[260];
		ZeroMemory(buf,260);
		*(WORD*)&buf[0]=edit.LineLength();//idx);// not line
		edit.GetLine(line,buf);
		afxDump << buf << "\n";
#endif
	}
	
	CEditView::OnLButtonDown(nFlags, point);
}
WJN92 2017-12-17
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
TEXTMETRIC 中有 LONG tmAveCharWidth; 平均宽度 LONG tmMaxCharWidth; 最大宽度
这个没用吧。每个字的宽度不一样的 我现在在看 DrawGlyphRun ,但是不太明白
schlafenhamster 2017-12-17
  • 打赏
  • 举报
回复
TEXTMETRIC 中有 LONG tmAveCharWidth; 平均宽度 LONG tmMaxCharWidth; 最大宽度
schlafenhamster 2017-12-17
  • 打赏
  • 举报
回复
那你就自己计算 字符 位置
WJN92 2017-12-17
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
RichEdit.getCharFromPosition

void CDbgViewView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CRect rc;
	GetClientRect(rc);
	rc.right=m_leftMargin;
	if(rc.PtInRect(point))
	{
		CEdit &edit=GetEditCtrl();
		int line= HIWORD (edit.CharFromPos(point));//edit.LineFromChar(idx);
		AddBreakLine(line);
#ifdef _DEBUG
		afxDump << line << "\n";
		char buf[260];
		ZeroMemory(buf,260);
		*(WORD*)&buf[0]=edit.LineLength();//idx);// not line
		edit.GetLine(line,buf);
		afxDump << buf << "\n";
#endif
	}
	
	CEditView::OnLButtonDown(nFlags, point);
}
你没看清楚题目吧,在DX里面哪里来richedit呢? 我需要的是自己做一个textbox呢。

15,979

社区成员

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

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