15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Itemheight for ownerdrawn ListBox

Mats Mеnhav -- manhav@connectum.skurup.se
Friday, April 19, 1996

-- [ From: Mats Manhav * EMC.Ver #2.5.02 ] --

ENV: Win NT/95 MSVC 4.1
Hi,
I am creating an ownerdrawn listbox class that is derived from CListBox.

I want most of the drawing in the dialog box to be exactly like a standard
ListBox.
The standard ListBox has an item height of 13, but when I make it OwnerDrawn
the 
default item height is 19. How do I retrieve the correct value to use.
I thought GetSystemMetrics() a good candidate, but could not find an index
fitting 
for a ListBox height.

Mats
--
==========================================================================
Mats Mеnhav (Mats Manhav for 7-bit people)
email:manhav@connectum.skurup.se   WWW: http://connectum.skurup.se/~manhav
FAX:  (int) 46 (0) 414 243 05      Phone: (int) 46 (0) 414 243 05         
==========================================================================




Willie Lyons -- willie@ccohs.ca
Monday, April 22, 1996

[Mini-digest: 2 responses]

Mats Manhav wrote:
> 
> ENV: Win NT/95 MSVC 4.1
> Hi,
> I am creating an ownerdrawn listbox class that is derived from 
> CListBox.
> 
> I want most of the drawing in the dialog box to be exactly like a  
> standard ListBox.
> The standard ListBox has an item height of 13, but when I make it  
> OwnerDrawn the default item height is 19. How do I retrieve the
> correct value to use.
> I thought GetSystemMetrics() a good candidate, but could not find an > 
> index fitting for a ListBox height.
> 

In the past I have used GetItemHeight on a normal listbox and 
SetItemHeight on the ownerdraw listbox within WM_INITDIALOG. You could 
also just SetItemHeight with a value of 13 if you have no normal listbox 
from which to get the standard item height.
-----From: Don.Irvine@net-tel.co.uk

You need to process the WM_MEASUREITEM message returning the height passed on
the font selected in the listbox. The following code works for me:

void CConfigDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT
lpMeasureItemStruct)
{
   if( nIDCtl != -1 )
   {  
      CFont* pFont = GetFont();
      if(pFont != NULL)
      {
         CWindowDC dc(this);                          
         CFont* pOldFont = dc.SelectObject( pFont );
                                     
         TEXTMETRIC tm;                              
         dc.GetTextMetrics( &tm );      
                                            
         lpMeasureItemStruct->itemHeight = tm.tmExternalLeading +
tm.tmHeight;
                                                            
         dc.SelectObject( pOldFont );
      }
   } 
}


Don




| Вернуться в корень Архива |