Код (Text): ; Процедура "AddStringToComboBox" ; Добавляет массив строк в сонтрол ComboBox. ; ; Пример использования: ; ... ; _str db 'строка_1',0 ; db 'строка_2',0 ; ... ; ... ; db 'строка_n',0 ; db 0 ; ... ; ; @call AddStringToComboBox,[h_combobox],_str ; AddStringToComboBox: ; hCBWnd,pStr push ebx esi edi mov esi,[esp+08h+0Ch] .add_string: cmp byte [esi],0 je AddStringToComboBox.finish mov eax,[esp+04h+0Ch] push esi push 0 push 143h ;CB_ADDSTRING push eax call [SendMessage] .next_string: lodsb or al,al jnz AddStringToComboBox.next_string jmp AddStringToComboBox.add_string .finish: pop edi esi ebx retn 08h
если не открывается, то вот ключевые моменты: 1. Код (Text): week db "Понедельник",0 db "Вторник",0 db "Среда",0 db "Четверг",0 db "Пятница",0 db "Суббота",0 db "Воскресенье",0 db 0 2. Код (Text): cmp [uMsg],WM_INITDIALOG jne @F invoke GetDlgItem,[hWnd],COMBO_1 stdcall cb_fill_str,eax,week jmp .exit_true @@: 3. Код (Text): proc cb_fill_str hWnd, strtab push edi mov edi,[strtab] @@: cmp byte [edi],0 je @F invoke SendMessage,[hWnd],CB_ADDSTRING,0,edi mov ecx,127 xor eax,eax repne scasb jmp @B @@: pop edi ret endp
кстати, важный момент: высота контрола на форме - вместе с выпавшим списком. если сделать высоту комбобокса в одну строку - можно просто не увидеть выпавший список, т.к. он будет обрезан - не забудь "растянуть" его вертикально.
растянуть в редакторе ресурсов либо задай ему высоту 60 вдогонку - макросы для masm32 Код (Text): ; ComboBox ; Add String AddCboStr Macro hcbo,indx,pbuff invoke SendMessage, hcbo, CB_ADDSTRING, indx,pbuff EndM ; Set Current Selection SetCboSel Macro hcbo,indx invoke SendMessage, hcbo, CB_SETCURSEL, indx, 0 EndM ; Get Current Selection GetCboSel Macro hcbo invoke SendMessage, hcbo, CB_GETCURSEL, 0, 0 EndM ; Reset Content ResetCbo Macro hcbo invoke SendMessage,hcbo, CB_RESETCONTENT,0,0 EndM использование: AddCboStr hCbo,0,addr szSomeStr AddCboStr hCbo,1,addr szSomeStr2 AddCboStr hCbo,2,addr szSomeStr3 SetCboSel hCbo,0 где hCbo - хэндл комбобокса
Скажите если комбо бокц создается с помощью CreateWindow то зачем например в Visual Studio есть готовый контрол который просто можно перетянуть на дилоговое окно? Я создал диалоговое окно и добавил Extended комбо бокс и после этого окно перестало появляться. Если добавить простой комбо бокс то он появляется, надписи можно добавить, только при нажатии они все не выскакивают вниз а видна только первая с индексом 0.
Если уж очень интересно- можно заглянуть в МСДН-рубрика Dialog Data Exchange Механизм такой.Там и его работа описана с картинками. Сделано это для реализации технологии-"что вижу,то и делаю"-для быстроты разработки GUI. Так,к примеру,очень быстро можно накидать кучу кнопок, настроить их местоположение,расстояние и прочее.
Это потому, что ты не узказал в ресурсах область раскрытия выпадающего списка.Нужно потянуть за кнопочку со стрелочкой -появится рамочка Если создавал динамически, через Create, в RECT для bottom'а ставим высоту комбика с дроплистом, эдак не не менее 200 длясчастья Что-то не то Такого не бывает