'da bir String'in genişliğini nasıl bulabilirim? WIN32'de bir dizinin genişliğini GetTextMetrics işlevini kullanmaktan ve tmAveCharWidth * strSize?WIN32
WIN32
cevap
GetTextExtentPoint32 kullanmayı deneyin. Bu, mantıksal birimlerde işlenen dizenin genişliğini ve yüksekliğini ölçmek için verilen aygıt bağlamı için geçerli yazı tipini kullanır. Varsayılan haritalama modu için, MM_TEXT, 1 mantıksal birim 1 pikseldir. Ancak, geçerli aygıt bağlamı için eşleme modunu değiştirdiyseniz, mantıksal bir birim pikselle aynı olmayabilir. Farklı mapping modes on MSDN hakkında bilgi alabilirsiniz. Eşleme modu ile GetTextExtentPoint32 tarafından size döndürülen boyutları piksellere dönüştürebilirsiniz.
Teşekkürler, ben bunun için tanımaktayım. :) – Razvi
GetTextExtentPoint32, "mantıksal birimleri" kullanır; piksel değil: http://msdn.microsoft.com/en-us/library/dd144938%28VS.85%29.aspx – user20493
@user iyi yakalama. Eşleme modu, MM_TEXT (varsayılan), 1 mantıksal birim = 1 piksel olduğunda, ancak bu mutlaka doğru olmak zorunda değildir. Cevabımı değiştireceğim. –
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); }
Yönteminiz, kesinlikle GetTextExtentPoint32() kullanmaktan daha iyidir. –
Kafam karıştı. layoutRect nedir? Anlayamıyorum – Kross
Bunu nasıl kullandığınıza bağlı olarak, DrawText'i DT_CALCRECT ile belirtebilirsiniz ve bunu (her zaman benim için oldukça doğru bir şekilde yaptı) metin/yazı tipi/etc'ye bağlı olarak gerekli dikdörtgenin boyutunu hesaplar.
Kesin bilmiyorum, ama gibi görünüyor:
HDC hDC = GetDC(NULL);
RECT r = { 0, 0, 0, 0 };
char str[] = "Whatever";
DrawText(hDC, str, strlen(str), &r, DT_CALCRECT);
işe yarayabilir.
Teşekkürler, denedik ve GetTextExtentPoint32 :) ile aynı genişlik gösteriyor. – Razvi
Bu, eşleme modunu denklem dışında aldığından, GetTextExtentPoint32'den çok daha iyi bir çözümdür. Yazarın değişmesi gereken bir şey de DrawText'in bayrakları. 'DT_CALCRECT | DT_NOPREFIX | DT_SINGLELINE'. Ortaya çıkan genişlik daha sonra "abs (r.right - r.left);" – c00000fd
Builder C++ için önce yeni TLabel'i dinamik olarak yapın ve font niteliklerini değiştirin. TLabel'ınızı autosize olarak ayarlayın. Daha sonra size TLabel width cadı string genişliğinizi piksel cinsinden gösterir.
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 API?
- 3. Win32. NOKTA
- 4. piton win32
- 5. C++ Win32
- 6. Win32 Hata Ayıklama Makroları
- 7. Win32 Pencere görüntülenmiyor
- 8. win32 için cufft.lib eksik
- 9. Gui, Win32 API'sı ile
- 10. Win32 işlevi OpenFileDialog için?
- 11. Win32 Pencere Sapını Doğrulama
- 12. Win32 Pencere Stilini Değiştir
- 13. Win32 API oyun döngüsü
- 14. Python win32: error
- 15. Win32 üzerinde GNU gettext kullanarak
- 16. Karşılıklı referans kayıtları Delphi (Win32)
- 17. C printf() wining with win32
- 18. WIN32 API WM_REFLECT iletisi nedir?
- 19. C# ile Win32 olayları oluşturma #
- 20. Geçerli bir Win32 uygulaması değil
- 21. Çift Arabelleğe Alma? Win32 C++
- 22. Win32 DLL alma sorunları (DllMain)
- 23. Win32 seçin/anket/eof/ANYTHING?
- 24. Şeffaf win32 penceresi ve metni
- 25. Win32/C++ Kullanarak PNG Okuma
- 26. Saydam arka planı ayarlama Win32
- 27. Kitaplık başlatması - Win32 uygulamasında pthread_once
- 28. IIS sc-win32 durum kodları
- 29. std :: unique_ptr, deleters ve Win32 API'sı
- 30. Win32 - Bir Düzenle Denetimine metin ekleme
"tmAveCharWidth * strSize", sabit genişlikli fontlar için yalnızca aklı başındadır. –