Мороженный
Гость
|
|
« : 05-07-2009 22:10 » |
|
Я не понимаю почему при этом флаге у меня не выпадает комбовый листбокс С CBS_OWNERDRAWFIXED всё нормально. Может быть есть какая-то хитрость или сплясать надо? Я уже всё перепробывал Приветъ.
|
|
« Последнее редактирование: 06-07-2009 06:03 от Вад »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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 просто не создается и не связывается (в сообщениях отрисовки все как надо)
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 06-07-2009 10:01 » |
|
были бы все телепатами ) Показывай код
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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."
|
|
|
Джон
просто
Администратор
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 появляется таже проблема. Я не знаю что забыл... Попробуйте #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++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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я навсегда ) )
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 07-07-2009 00:30 » |
|
Мороженный, не понимяу вопроса
работает ? Выпадает? Или нет ?
|
333.exe (36 Кб - загружено 790 раз.)
|
|
Записан
|
|
|
|
Мороженный
Гость
|
|
« Ответ #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.х версий тоже) всем спасибо, Алексу пиво :)
|
|
|
Записан
|
|
|
|
|