OWNERDRAW菜单文字宽度问题

softrain 2005-07-22 04:57:08
我在messureitem消息中设置ITEM的宽度,如果文字有中文,背景宽度总是远大于文字宽度。
如何解决?
我这样调用:GetTextExtentPoint(dc,pItem->ch,strlen(pItem->ch),&sz);
...全文
218 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
softrain 2005-08-01
  • 打赏
  • 举报
回复
为什么要设置字体后计算出来的字体扩展长度才正确呢?请两位到这个帖子解答,本帖结了。
http://community.csdn.net/Expert/TopicView3.asp?id=4180771
这个帖子分少了,我在新帖子给两位再补点分。
吹泡泡的小猫 2005-08-01
  • 打赏
  • 举报
回复
需要设置
softrain 2005-08-01
  • 打赏
  • 举报
回复
字体是默认的,没有专门设置字体。
softrain 2005-08-01
  • 打赏
  • 举报
回复
改了还是不行
HDC dc= GetDC( hWndBackGround_ ) ;
SIZE sz;
GetTextExtentPoint(dc,pItem->ch,strlen(pItem->ch),&sz);
ReleaseDC( 0, dc );
MSItem->itemWidth = sz.cx;
MSItem->itemHeight = sz.cy + 2;
goodboyws 2005-08-01
  • 打赏
  • 举报
回复
楼上说的对
我是这么用的
void CMenuOwnerDraw::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
//改变菜单的大小
HDC hdc; // handle to screen DC
SIZE size; // menu-item text extents

HFONT hfontOld; // handle to old font
hdc = GetDC(NULL);

MENOWNERDRAWUINFO* lpMenuInfo = (MENOWNERDRAWUINFO*)lpMeasureItemStruct->itemData;

hfontOld = (HFONT)SelectObject(hdc, m_MenuOwnerDraw.hFont);

GetTextExtentPoint32(hdc, lpMenuInfo->szText,
_tcslen(lpMenuInfo->szText), &size);
lpMeasureItemStruct->itemWidth = size.cx+20;
lpMeasureItemStruct->itemHeight = size.cy+8;


SelectObject(hdc, hfontOld);
ReleaseDC(NULL, hdc);

}
吹泡泡的小猫 2005-08-01
  • 打赏
  • 举报
回复
调用GetTextExtentPoint之前要把字体先select到dc,得到长度之后加一个10到20象素的余量
softrain 2005-08-01
  • 打赏
  • 举报
回复
HDC dc= GetDC( 0 ) ;
pItem->ch的数据是在创建菜单的时候把文字放到这个结构中的。
文字没问题,可能是DC的问题了。
goodboyws 2005-08-01
  • 打赏
  • 举报
回复
1.dc可能不对
dc = GetDC(NULL);
2.pItem->ch的数据从哪儿来
softrain 2005-07-31
  • 打赏
  • 举报
回复
大家看不到?

15,980

社区成员

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

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