Makale numarası: 145994 - Son Gözden Geçirme: 21 Kasım 2006 Salı - Gözden geçirme: 4.1

Visual C++ geçerli yazı tipini temel iletişim kutusunu birim nasıl

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Not Microsoft Visual C++ .NET (2002), Microsoft .NET Framework tarafından sağlanan bir yönetilen kod model hem de yerel Microsoft Windows kod modeli yönetilmeyen destekler. Bu makaledeki bilgiler yalnızca yönetilmeyen Visual C++ kod uygulanır.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Iletişim birimleri hesaplanırken GetDialogBaseUnits() sistem yazı tipini her zaman varsayar. Dönüş değeri, sistem yazı tipi dışında herhangi bir yazı tipi kullanıyorsanız, iletişim kutusunda doğru olmayabilir. Bu makalede, iletişim kutusunu birim geçerli yazı tipi göre hesaplamak için kullanabileceğiniz iki seçenekleri sunar.

Daha fazla bilgi

Yatay temel birimi, sistem yazı tipi karakterleri ortalama genişliği (piksel cinsinden) eşittir. Yardım GetDialogBaseUnits() birimleri doğru olarak hesaplamak için aşağıdaki kod önerir:
pixelX = (dialogunitX * baseunitX) / 4
pixelY = (dialogunitY * baseunitY) / 8
				

Sistem yazı tipine kullanmıyorsanız, sağ koordinatları almak için bazı ek hesaplamalar yapmak gerekir. Iki yöntem şunlardır:

Yöntem Bir

Dikey bir iletişim kutusu birimi için karakter yüksekliği eşdeğerdir. Yatay bir iletişim kutusu birimi iletişim kutusunun yazı tipi ortalama karakterin genişliğine eşdeğerdir. Ortalama bir karakter genişliği alfabetik karakter kümesini ortalama metin kapsamını bularak hesaplar. TmAveCharWidth kesin olmaması nedeniyle, bu gereklidir. Bu kodu kullanın:
   void CAboutDlg::OnPaint()
   {
       CPaintDC dc(this); // device context for painting

       CFont* pFont = GetFont();
       CFont* oldFont = dc.SelectObject(pFont);
       TEXTMETRIC tm;
       dc.GetTextMetrics( &tm );
       int baseUnitY = tm.tmHeight;
       CSize size;
       size = dc.GetTextExtent(
           "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52);
       int baseUnitX = (size.cx / 26 + 1) / 2;
       TRACE("baseUnitX = %d\n", baseUnitX);
       TRACE("baseUnitY = %d\n", baseUnitY);
       dc.SelectObject(oldFont);

   }
				

Yöntem İki

Diğer bile daha kolaydır. X bir koordinatını MapDialogRect() kullanarak, 4 = y = 8, iletişim kutusu iletişim kutusunun yazı tipi ne olursa olsun temel birim döndürecektir. Ancak, çoğu durumda, Programcı iletişim kutusunu temel birim bilmeniz gerekmez. MapDialogRect() doğrudan da doğrudan aygıt koordinatları için herhangi bir iletişim kutusu birimleri dönüştürmek için kullanılır. Aşağıdaki örnek kodu nasıl bu iletişim kutusunu temel birimden bulmak için kullanılabilir gösterir:
   void CAboutDlg::OnPaint()
   {
       CPaintDC dc(this); // device context for painting

       CRect rc( 0, 0, 4, 8 );

       MapDialogRect( &rc );
       int baseUnitY = rc.bottom;
       int baseUnitX = rc.right;
       TRACE("baseUnitX = %d\n", baseUnitX);
       TRACE("baseUnitY = %d\n", baseUnitY);

   }
				

Referanslar

Ek bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
125681  (http://support.microsoft.com/kb/125681/EN-US/ ) Nasıl iletişim temel birimler, sistem tabanlı olmayan bir yazı tipi ile hesapla

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 1.5 Professional Edition
    • Microsoft Visual C++ 1.51
    • Microsoft Visual C++ 1.52 Professional Edition
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 6.01 Professional Edition
    • Microsoft Visual C++ 4.0 Professional Edition
    • Microsoft Visual C++ 4.1 Aboneliği
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++ 5.0 Learning Edition
    • Microsoft Visual C++ 5.0 Learning Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
Anahtar Kelimeler: 
kbmt kbinfo kbcode kbdlg kbfont kbhowto kbuidesign KB145994 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:145994  (http://support.microsoft.com/kb/145994/en-us/ )