Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с CBS_OWNERDRAWVARIABLE  (Прочитано 11299 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Мороженный
Гость
« : 05-07-2009 22:10 » 

Я не понимаю почему при этом флаге у меня не выпадает комбовый листбокс  С ума сойти... С CBS_OWNERDRAWFIXED всё нормально. Может быть есть какая-то хитрость или сплясать надо? Я уже всё перепробывал  Я зол!

Приветъ.
« Последнее редактирование: 06-07-2009 06:03 от Вад » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 06-07-2009 02:58 » 

наверное это
Цитата
The owner of an owner-drawn combo box can process a WM_MEASUREITEM message to specify the dimensions of list items in the combo box. If the application creates the combo box by using the CBS_OWNERDRAWFIXED style, the system sends the WM_MEASUREITEM message only once. The dimensions specified by the owner are used for all list items. If the CBS_OWNERDRAWVARIABLE style is used, the system sends a WM_MEASUREITEM message for each list item added to the combo box. The owner can determine or set the height of a list item at any time by using the CB_GETITEMHEIGHT and CB_SETITEMHEIGHT messages, respectively.

и ещё одна статья, с примером

Цитата
This method is called by the framework when a combo box with an owner-drawn style is created.
virtual void MeasureItem(
LPMEASUREITEMSTRUCT lpMeasureItemStruct );
Parameters
lpMeasureItemStruct
A long pointer to a MEASUREITEMSTRUCT structure.
Remarks
By default, this method does nothing. Override this method and fill in the MEASUREITEMSTRUCT structure to inform Windows CE of the dimensions of the list box in the combo box. If the combo box is created with the CBS_OWNERDRAWVARIABLE style, the framework calls this method for each item in the list box. Otherwise, this method is called only once.
Using the CBS_OWNERDRAWFIXED style in an owner-drawn combo box created with the SubclassDlgItem method of CWnd involves further programming considerations.
Example
// CMyComboBox is an owner-drawn combo box derived from CComboBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The combo box control was created with
// the following code:
//  pmyComboBox->Create(
//    WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//    CBS_SORT|CBS_OWNERDRAWVARIABLE,
//    CRect(10,10,200,200), pParentWnd, 1);
//
void CMyComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
  ASSERT(lpMeasureItemStruct->CtlType == ODT_COMBOBOX);

  if (lpMeasureItemStruct->itemID != (UINT) -1)
  {
    LPCTSTR lpszText = (LPCTSTR) lpMeasureItemStruct->itemData;
    ASSERT(lpszText != NULL);
    CSize   sz;
    CDC*    pDC = GetDC();

    sz = pDC->GetTextExtent(lpszText);

    ReleaseDC(pDC);

    lpMeasureItemStruct->itemHeight = 2*sz.cy;
  }
}

Записан

Мороженный
Гость
« Ответ #2 : 06-07-2009 09:43 » 

алекс, было бы все так просто. я уже какой только дурью не занимался  Я зол!
после динамического создания GetLastError возвращает Invalid window handle. как будто ComboLBox просто не создается и не связывается Быть такого не может (в сообщениях отрисовки все как надо)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 06-07-2009 10:01 » 

были бы все телепатами )
Показывай код
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 06-07-2009 10:12 » 

Мороженный, ты извини конечно, но может действительно хватит дурью заниматься?

"Дорогие  ученые.  У меня который год в подполе происходит подземный стук.  Объясните, пожалуйста, как он происходит" (с) Стругацкие ПНВС

Ты серьёзно полагаешь, что на основе информации "при этом флаге у меня не выпадает комбовый листбокс " и "я уже всё перепробывал" можно хоть как-то тебе помочь? Сотни, тысячи программеров делают собственный комбобоксы для выбора цвета, типа линий, шрифта и тд и тп, только у тебя НЕ. К сожалению телепатов становится всё меньше и меньше, а нагрузка на них всё больше и больше. Так что либо становись в очередь к телепату, либо... В общем тебе решать. Ага
 
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 06-07-2009 10:12 » 

Лёш, а почему не сразу?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Мороженный
Гость
« Ответ #6 : 06-07-2009 11:57 » 

Джон, а что мне другие? Во ты сам лично делал VARIABLE на WinAPI, чтобы мне такое говорить? Делал - покажи я не понимаю что ни так; не делал - не говори такое (не провоцируй Улыбаюсь )

Алексей1153++, вот кодес. Ресурс - пустой диалог с двумя Combo (один CBS_OWNERDRAWFIXED, другой CBS_OWNERDRAWVARIABLE соотв. (без HASSTRINGS)) Если отпилить манифест на CC6.0 то у FIXED появляется таже проблема. Я не знаю что забыл...

Попробуйте RTFM Улыбаюсь
Код:
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

/////////////////////////////////////////////////////////////////////

LRESULT __stdcall DlgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case WM_INITDIALOG:
for (int i=0; i<10; ++i)
{
SendDlgItemMessageW(hWnd, IDC_COMBO1, CB_ADDSTRING, 0, i);
SendDlgItemMessageW(hWnd, IDC_COMBO2, CB_ADDSTRING, 0, i);
}
return 1;

case WM_MEASUREITEM:
{
LPMEASUREITEMSTRUCT lpmi=(LPMEASUREITEMSTRUCT)lParam;
if (lpmi->itemID==-1)
lpmi->itemHeight = 16; else
lpmi->itemHeight = 32;
}
break;

case WM_DRAWITEM:
{
LPDRAWITEMSTRUCT lpdi=(LPDRAWITEMSTRUCT)lParam;
HBRUSH hBrush;

if (lpdi->itemID % 2)
hBrush = (HBRUSH)GetStockObject(LTGRAY_BRUSH); else
hBrush = (HBRUSH)GetStockObject(GRAY_BRUSH);

FillRect(lpdi->hDC, &lpdi->rcItem, hBrush);
}
break;

case WM_CLOSE:
EndDialog(hWnd, 0);
return 1;
}

return 0;
}

int main()
{
return DialogBoxParamW(GetModuleHandleW(0), MAKEINTRESOURCEW(101), 0, (DLGPROC)DlgProc, 0);
};
Записан
Мороженный
Гость
« Ответ #7 : 06-07-2009 12:08 » 

Вот .эхэ для визуализации Ага
« Последнее редактирование: 07-07-2009 00:37 от Алексей1153++ » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 06-07-2009 13:39 » 

Не провоцируй, и не провоцируем будешь. Ага

Успехов.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 06-07-2009 15:47 » 

Мороженный,

1) не провоцируй Джона, нам потом его успокаивать )
2) твой ихзе не запускается. Он вообще не подаёт признаков жизни.
3) после плясок с бубнами (листы не выпадали) решил как обычно задать размер выпадающих частей в редакторе, после этого они стали выпадать. (задавать так: в редакторе щёлкаем по стрелочке комбы, затем за синий квадратик растягиваем лист вниз как нужно)
Ресурсы после этого стали быть описаны так

Код:
    COMBOBOX        IDC_COMBO1,17,49,48,104,CBS_DROPDOWNLIST | 
                    CBS_OWNERDRAWFIXED | CBS_SORT | WS_VSCROLL | WS_TABSTOP
    COMBOBOX        IDC_COMBO2,77,52,48,36,CBS_DROPDOWN |
                    CBS_OWNERDRAWVARIABLE | CBS_SORT | WS_VSCROLL |
                    WS_TABSTOP
Записан

Мороженный
Гость
« Ответ #10 : 06-07-2009 16:20 » 

хорошо что ты попробывал
если ты говоришь что у тебя всё работает, значит у тебя это на обоих боксах?



з.ы. по поводу .эхэ - ну забыл я отрубить линки к пдб (6я навсегда Улыбаюсь) )

Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 07-07-2009 00:30 » 

Мороженный, не понимяу вопроса

работает ? Выпадает? Или нет ?

* 333.exe (36 Кб - загружено 747 раз.)
Записан

Мороженный
Гость
« Ответ #12 : 10-07-2009 10:21 » 

и такъ :)

Цитата
работает ? Выпадает? Или нет ?
да

Собственно решение: для CBS_OWNERDRAWVARIABLE (и CBS_OWNERDRAWFIXED ниже 6.х) необходимо явно определиться с размером -> https://forum.shelek.ru/index.php/topic,21141.msg209486.html#msg209486
как следствие CB_SETMINVISIBLE уже ничего не решает (для CBS_OWNERDRAWFIXED не 6.х версий тоже)

всем спасибо, Алексу пиво :)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines