में स्ट्रिंग (पिक्सेल में) की चौड़ाई को कैसे ढूंढें, क्या आप GetTextMetrics फ़ंक्शन का उपयोग करने और tmAveCharWidth * strSize का उपयोग करने से WIN32 में एक स्ट्रिंग की चौड़ाई को माप सकते हैं?WIN32
WIN32
उत्तर
GetTextExtentPoint32 का उपयोग करें। यह तार्किक इकाइयों में प्रस्तुत स्ट्रिंग की चौड़ाई और ऊंचाई को मापने के लिए दिए गए डिवाइस संदर्भ के लिए वर्तमान फ़ॉन्ट का उपयोग करता है। डिफ़ॉल्ट मैपिंग मोड के लिए, MM_TEXT, 1 लॉजिकल यूनिट 1 पिक्सेल है।
हालांकि, अगर आपने वर्तमान डिवाइस संदर्भ के लिए मैपिंग मोड बदल दिया है, तो एक लॉजिकल यूनिट पिक्सेल के समान नहीं हो सकता है। आप विभिन्न mapping modes on MSDN के बारे में पढ़ सकते हैं। मैपिंग मोड के साथ, आप GetTextExtentPoint32 द्वारा पिक्सेल में आपके द्वारा लौटाए गए आयामों को परिवर्तित कर सकते हैं।
धन्यवाद, यही वह है जो मैं चाहता था। :) – Razvi
GetTextExtentPoint32 "तार्किक इकाइयों" का उपयोग करता है; पिक्सेल नहीं: http://msdn.microsoft.com/en-us/library/dd144938%28VS.85%29.aspx – user20493
@user अच्छी पकड़। जब मैपिंग मोड MM_TEXT (डिफ़ॉल्ट) है, 1 लॉजिकल यूनिट = 1 पिक्सेल है, लेकिन यह जरूरी नहीं है कि यह सच होना चाहिए। मैं अपना जवाब संशोधित करूंगा। –
VOID Example_MeasureString(HDC hdc) { Graphics graphics(hdc); // Set up the string. WCHAR string[] = L"Measure Text"; Font font(L"Arial", 16); RectF layoutRect(0, 0, 100, 50); RectF boundRect; // Measure the string. graphics.MeasureString(string, 12, &font, layoutRect, &boundRect); // Draw a rectangle that represents the size of the string. graphics.DrawRectangle(&Pen(Color(255, 0, 0, 0)), boundRect); }
आपकी विधि निश्चित रूप से GetTextExtentPoint32() का उपयोग करने से बेहतर है। –
मुझे एक उलझन में बात है। layoutRect क्या है? मुझे यह समझ में नहीं आता – Kross
इस पर निर्भर करते हुए कि आप इसका उपयोग कैसे कर रहे हैं, आप DT_CALCRECT के साथ DrawText का उपयोग कर सकते हैं और यह (यह हमेशा मेरे लिए काफी सटीक रूप से किया जाएगा) पाठ/फ़ॉन्ट/आदि के आधार पर आवश्यक आयताकार के आकार की गणना करेगा।
मैं कुछ के लिए पता नहीं है, लेकिन ऐसा लगता है कि:
HDC hDC = GetDC(NULL);
RECT r = { 0, 0, 0, 0 };
char str[] = "Whatever";
DrawText(hDC, str, strlen(str), &r, DT_CALCRECT);
काम हो सकता है।
धन्यवाद, इसे आजमाया और GetTextExtentPoint32 के समान चौड़ाई दिखाता है :)। – Razvi
यह 'GetTextExtentPoint32' से बहुत बेहतर समाधान है क्योंकि यह समीकरण के बाहर मैपिंग मोड लेता है। लेखक को बदलने की जरूरत है एक चीज़ 'DrawText' के लिए झंडे है। इसे 'DT_CALCRECT | पर सेट करें DT_NOPREFIX | DT_SINGLELINE'। परिणामी चौड़ाई को तब 'abs (r.right - r.left) के रूप में गणना की जा सकती है; ' – c00000fd
बिल्डर सी ++ के लिए पहले नया TLabel गतिशील रूप से बनाएं और फिर फ़ॉन्ट विशेषताएँ बदलें। अपने TLabel को ऑटोसाइज के रूप में सेट करें। फिर आप आपको TLabel चौड़ाई चुड़ैल पिक्सल में अपनी स्ट्रिंग चौड़ाई का प्रतिनिधित्व कर सकते हैं।
int WidthPixels (String font, int size, String text)
{
TLabel* label = new TLabel(Form1); // dynamic TLabel
label->AutoSize = true;
label->Font->Name = font; // your font
label->Font->Size = size; // your font size
label->Caption = text; // your string
return label->Width;
}
int width = WidthPixels("Times New Roman", 19 , "Hey");
- 1. Win32
- 2. WIN32
- 3. Win32
- 4. Win32
- 5. Win32
- 6. Win32
- 7. Win32
- 8. Win32
- 9. Win32
- 10. Win32
- 11. Win32
- 12. WIN32
- 13. सी ++ Win32, एक Win32 DialogBox
- 14. #if परिभाषित (WIN32) और #ifdef (WIN32)
- 15. Win32 एपीआई
- 16. Win32 एपीआई
- 17. Win32 पर्ल
- 18. Win32: hwnd
- 19. Win32 रजिस्ट्री
- 20. डेल्फी Win32
- 21. Win32 विंडो
- 22. Win32/SDL
- 23. सी ++ (Win32)
- 24. Win32 C++
- 25. Win32 API
- 26. Win32 प्रोग्राम
- 27. Win32 API
- 28. Win32 API
- 29. Win32 API?
- 30. Win32 MessageBox
आपको ध्यान रखना चाहिए कि "tmAveCharWidth * strSize" निश्चित चौड़ाई फ़ॉन्ट के लिए केवल सायन है। –