Подскажите пожалуйста, как сделать чтобы, допустим, в соответствии с выбранным пунктом меню combobox либо позволял вводить данные(как edit), либо нет(как простой список). Может каким сообщением или что-то в этом роде?
Castor Нужно послать EM_SETREADONLY Edit-у ComboBox-а: Код (Text): HWND hEdit = FindWindowEx(hCombo, NULL, "Edit", NULL); if(hEdit) SendMessage(hEdit, EM_SETREADONLY, 1, 0); тогда ComboBox будет read-only, а чтобы это свойство снять - Код (Text): SendMessage(hEdit, EM_SETREADONLY, 0, 0);
Поднимаю эту старую тему, т.к. для меня вопрос так и не решён. Метод,который предложил vinnie_pooh,для меня не подходит. Я пробовал изменять флаги ComboBox'а следующим образом: Код (Text): mov dwFlagsMask, 0FFFFFFFFh xor dwFlagsMask, CBS_DROPDOWN invoke GetWindowLong, hCombo, GWL_STYLE and eax, dwFlagsMask or eax, CBS_DROPDOWNLIST invoke SetWindowLong, hCombo, GWL_STYLE, eax invoke SetWindowPos, hCombo, 0, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE + WP_NOZORDER + SWP_FRAMECHANGED invoke UpdateWindow, hCombo Факт в том,что это всё не работает как положено.Флаги меняются -- это можно посмотреть Spy++ -- но сам контрол остаётся таким же, т.е. словно бы ничего и не менялось. Поэтому вопрос: есть ли возможность изменить флаги Combobox на лету?
не все свойства можно менять через SetWindowLong. некоторые устанавливаются при создании контрола и не меняются никаким образом. как выход - пересоздать контрол с требуемыми свойствами
Flasher, спасибо за исходники.Буду смотреть и извлекать полезное =) cresta, похоже, что так и есть.Самый походу простой вариант в данном случае -- это создать два контрола с разными стилями на одном месте и в зависимости от нужд прятать один и показывать другой.
DillerInc В том, что флаги на лету изменить запросто, вы и сами ведь убедились Так что на самом деле вас интересует возможность изменить на лету функциональность, верно? А знаете - можно. Чем отличается комбобокс с CBS_DROPDOWN от комбобокса с CBS_DROPDOWNLIST "физически"? Тем, что у второго нет дочернего Edit-а. Ну, так если убьёте этот Edit - пол-дела будет сделано: функционально CBS_DROPDOWN скукожится до CBS_DROPDOWNLIST. Правда, в обратном направлениии лететь уже не так легко (зато куда занимательнее): создать копию убитого Edit-а и приживить его взад. Попробуйте
kero, хм...получается некое удаление гланд через задний проход...не думаю,что это оптимальный вариант.