2009-11-16 30 views
5

Tôi muốn tự động định lại kích cỡ một CButton thành chiều rộng của văn bản bên trong nó. Có cách nào được xây dựng trong để làm điều này trong MFC, hoặc một cách tính chiều rộng pixel của một số văn bản được chỉ định (để tôi có thể sử dụng CWnd::SetWindowPos)?Nhận chiều rộng văn bản trong MFC

Trả lời

6

Bạn có thể sử dụng CDC::GetTextExtent để tính chiều rộng của văn bản trong một phông chữ nhất định. Sử dụng CWnd::GetDC để lấy bối cảnh thiết bị từ điều khiển hiển thị văn bản.

6

Thật tẻ nhạt. Bạn cần sử dụng CWnd::GetFont() trên nút để lấy phông chữ đang sử dụng và sau đó sử dụng tiêu chuẩn GetTextText trên đối tượng CDC nơi bạn sẽ chọn phông chữ đó. Nó trông giống như

CClientDC dc(&button); 
CFont * pOldFont = dc.SelectObject(button.GetFont()); 
... dc.GetTextExtent... 
dc.SelectObject(pOldFont); 
4

Ngoài câu trả lời @ demoncodemonkey, bạn có thể gọi CDC::DrawText với DT_CALCRECT cờ. Bằng cách này, các văn bản sẽ không được rút ra, nhưng các CRect bạn vượt qua để chức năng sẽ có chiều rộng và chiều cao của văn bản để vẽ.

Điều này đặc biệt hữu ích nếu bạn muốn vẽ văn bản có ngắt dòng (sử dụng cờ DT_WORDBREAK). Bạn sẽ không thể thực hiện điều đó bằng cách sử dụng CDC::GetTextExtent.

+0

Có sự khác biệt về hiệu suất giữa 'GetTextExtent' và' DrawText' không? – Richard

1
CClientDC hdc(this); 
GetRect.SetRect(0,0,iLabelWidth,0); 
// 
//To get Height of Lable in advance 
// 
hdc.DrawText(
       TempData, 
       TempData.GetLength(), 
       GetRect, 
       DT_CALCRECT | DT_MODIFYSTRING | DT_WORDBREAK 
      ); 
Các vấn đề liên quan