2008-10-31 2 views
1

я использовал класс, производный от CListBox, и создать его следующим образом:Размер элемента списка CListBox изменяется при изменении размера поля списка, даже если я указываю размер в методе MeasureItem()?

style:WS_CHILD|WS_VISIBLE |LBS_OWNERDRAWFIXED | WS_VSCROLL | WS_HSCROLL 

Я ожидаю, что элемент в ListBox, чтобы быть иметь фиксированный размер, не влияет на размер окна списка. Поэтому я переопределить метод MeasureItem(), в котором я указать размер элементов, как показано ниже:

void CMyListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMIS) 
{ 
    lpMIS->itemHeight = ALBUM_ITEM_HEIGHT; 
    lpMIS->itemWidth = ALBUM_ITEM_WIDTH; 
} 

Но изменение размера элемента в зависимости от изменения размера бокса списка. что-то не так с моим подходом?

ответ

0

Если вы посмотрите на MSDN вход для CListBox::MeasureItem вы увидите, что это только раз, если стиль LBS_OWNERDRAWVARIABLE (не LBS_OWNERDRAWFIXED) не установлен. Если я правильно понял, это объясняло бы поведение, которое вы видите, потому что MeasureItem нужно будет вызывать каждый раз при изменении размера элемента управления.

Кроме того, вы считали, что очки сделаны в MFC Technical Note 14 : Custom Controls?

1

Что не упоминается в ссылке, что WM_MEASUREITEM называется каждый раз управления *_OWNERDRAWFIXED изменяется.

Я не знаю, как это должно быть официально, и на что он должен положиться, но он был проверен на CodeGuru и несколько сообщений на форуме, найденных в Google.

Если вы не хотите обрабатывать сообщение, просто установите частный флаг где-нибудь в первом вызове OnMeasureItem() и верните его, как только вы убедитесь, что он установлен в следующий раз.