2009-11-16 13 views
5

में टेक्स्ट चौड़ाई प्राप्त करें मैं इसके भीतर पाठ की चौड़ाई के लिए एक सीबीयूटन का गतिशील रूप से आकार बदलना चाहता हूं। क्या एमएफसी में ऐसा करने का कोई अंतर्निहित तरीका है, या कुछ निर्दिष्ट टेक्स्ट की पिक्सेल चौड़ाई की गणना करने का एक तरीका है (ताकि मैं CWnd::SetWindowPos का उपयोग कर सकूं)?एमएफसी

उत्तर

6

आप किसी निश्चित फ़ॉन्ट में टेक्स्ट की चौड़ाई की गणना करने के लिए CDC::GetTextExtent का उपयोग कर सकते हैं। टेक्स्ट प्रदर्शित करने वाले नियंत्रण से डिवाइस संदर्भ प्राप्त करने के लिए CWnd::GetDC का उपयोग करें।

6

यह कठिन है। आपको फ़ॉन्ट का उपयोग करने के लिए बटन पर CWnd::GetFont() का उपयोग करने की आवश्यकता है, और उसके बाद CDC पर मानक GetTextText का उपयोग करें जहां आप उस फ़ॉन्ट का चयन करेंगे। यह @ demoncodemonkey के जवाब देने के लिए की तरह

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

इसके अलावा कुछ लग रहा है, आप DT_CALCRECT ध्वज के साथ CDC::DrawText कॉल कर सकते हैं। इस तरह पाठ को खींचा नहीं जाएगा, लेकिन आपके द्वारा फ़ंक्शन में भेजे गए सीआरईटी में पाठ की चौड़ाई और ऊंचाई होगी।

यह विशेष रूप से उपयोगी है यदि आप लाइन ब्रेक के साथ टेक्स्ट खींचना चाहते हैं (DT_WORDBREAK ध्वज का उपयोग करके)। आप CDC::GetTextExtent का उपयोग करके ऐसा करने में सक्षम नहीं होंगे।

+0

क्या 'GetTextExtent' और' DrawText' के बीच कोई प्रदर्शन अंतर है? – 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 
      ); 
संबंधित मुद्दे