MFC编辑框(Edit Control)文本垂直居中方法

    使用MFC的编辑框时,常常需要设置编辑框文本的字体,同时使文本垂直居中。方法如下:

一,文本垂直居中。

	CRect rect;
	GetDlgItem(IDC_CC_COLCORNERNUM)->GetClientRect(&rect);
	::OffsetRect(&rect,0,15);
	::SendMessageA( ((CComboBox*)GetDlgItem(IDC_CC_COLCORNERNUM))->m_hWnd,EM_SETRECT,0,(LPARAM)&rect );

   其中::OffsetRect函数将指定的矩形移动到指定的位置:

  BOOL OffsetRect(
  LPRECT lprc, // 矩形
  int dx, // 横向偏移
  int dy // 纵向偏移
  );
  参数:
  Lprc:[输入输出]指向一个RECT结构,其中包含了被移动矩形的逻辑坐标
  Dx:[输入]指定的矩形左右移动的量。当向左移动的时候,这个参数必须是一个负值。
  Dy:[输出]指定的矩形上下移动的量。当想上移动的时候,这个参数应该是一个负值。
  返回值:
  如果函数成功,返回非0,否则返回0。

    从上面可以看出,这种方法只是使得编辑框上面留有一定距离的空白,并不是严格的垂直居中。使用时根据实际情况调节dx、dy尽量使得文本看起来居中。

二,文本字体设置

    字体设置比较简单,在**Dlg中定义CFont成员: m_showFont;

	CFont m_showFont;
    在OnInitDialog()中定义字体并给控件设置该字体:

	m_showFont.CreatePointFont( 100,L"黑体" );
	GetDlgItem(IDC_CC_COLCORNERNUM)->SetFont( &m_showFont );

三,使用冲突

   在使用中按照上面两个步骤,就是无法使得编辑框文本垂直居中。后来偶然的一次尝试,将第二步“文本字体设置”放在第一步“文本垂直居中”之前,结果发现编辑框文本垂直居中了。。原因尚不知道。


你可能感兴趣的:(VS/MFC)