ID Artikel: 145994 - Kajian Terakhir: 15 September 2011 - Revisi: 2.0

Bagaimana menghitung dialog kotak unit berdasarkan font saat ini di Visual C++

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Catatan Microsoft Visual C++.NET (2002) mendukung kedua kode dikelola model yang disediakan oleh Microsoft.NET Framework dan asli tidak dikelola Microsoft Windows kode model. Informasi di dalam artikel ini hanya berlaku untuk unmanaged Visual C++ kode.

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

GetDialogBaseUnits() selalu menganggap font sistem ketika menghitung dialog unit. Jika Anda menggunakan font apapun selain sistem font, nilai kembali tidak mungkin benar untuk Anda kotak dialog. Artikel ini menawarkan dua alternatif yang dapat Anda gunakan untuk menghitung unit kotak dialog yang didasarkan pada saat ini font.

INFORMASI LEBIH LANJUT

Horisontal unit dasar sama dengan rata-rata lebar (dalam piksel) karakter dalam sistem font. Bantuan untuk GetDialogBaseUnits() menunjukkan kode berikut untuk menghitung unit benar:
pixelX = (dialogunitX * baseunitX) / 4
pixelY = (dialogunitY * baseunitY) / 8
				

Namun, jika Anda tidak menggunakan font sistem, Anda perlu melakukan beberapa perhitungan tambahan untuk mendapatkan koordinat benar. Berikut adalah dua metode:

Metode satu

Kotak dialog vertikal unit setara dengan karakter tinggi. Kotak dialog horisontal unit setara dengan karakter rata-rata lebar font kotak dialog. Rata-rata karakter lebar dihitung oleh menemukan tingkat rata-rata teks set karakter abjad. Ini adalah diperlukan karena tmAveCharWidth tidak tepat. Gunakan kode ini:
   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);

   }
				

Metode dua

Alternatif lebih mudah. Menggunakan MapDialogRect() dengan Koordinat x = 4, y = 8 akan kembali dialog kotak unit dasar terlepas dari kotak dialog font. Namun, dalam kebanyakan situasi, para programmer tidak perlu untuk mengetahui kotak unit dasar dialog. MapDialogRect() dapat digunakan secara langsung untuk Mengkonversi setiap unit kotak dialog langsung ke perangkat koordinat. Berikut kode contoh menunjukkan bagaimana hal itu dapat digunakan untuk menemukan dialog kotak unit dasar:
   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);

   }
				

REFERENSI

Untuk informasi tambahan, silakan lihat berikut artikel di dalam Basis Pengetahuan Microsoft:
125681  (http://support.microsoft.com/kb/125681/EN-US/ ) Bagaimana menghitung unit dasar Dialog dengan Non-sistem berbasis Font

Berlaku bagi:
  • Microsoft Foundation Class Library 4.2, ketika digunakan dengan:
    • Microsoft Visual C++ 1.5 Professional Edition
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.01 Professional Edition
    • Microsoft Visual C++ 4.0 Professional Edition
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
Kata kunci: 
kbinfo kbcode kbdlg kbfont kbhowto kbuidesign kbmt KB145994 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:145994  (http://support.microsoft.com/kb/145994/en-us/ )