![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Edik |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 13.9.2006 Репутация: нет Всего: 1 |
вот у меня есть такой код с ним непонятка:
так вот, когда я в WM_CREATE поместил этот код заполнения листа комбобокса как в коде, то его у меня не выводит во время работы программы- комбобокс пуст. но когда я в WM_PAINT размещаю этот код инициализации комбобокса- то лист комбобокса во время работы этим WM_PAINT удваиваеться,(когда скажем свернешь и развернешь диалоговое окно - появляеться еще тот же лист ниже этого в дроп дауне) и так при каждом сворачивании и разворачивании окна. помогите разобраться раз и навсегда я уже давно эту мульку понять не могу. |
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Если я правильно понял, вместо WM_CREATE используй WM_INITDIALOG
|
|||
|
||||
| Edik |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 13.9.2006 Репутация: нет Всего: 1 |
не в том то и дело, что у меня диалоговое окно порождено от класса обычного не диалогового окна, то есть там WM_INITDIALOG не катит.
|
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
MFC что ли? |
|||
|
||||
| Edik |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 13.9.2006 Репутация: нет Всего: 1 |
да не посмотри сам, это не я нафантазировал- это с примера.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
В момент WM_CREATE контролов еще не существует, поэтому и не работает.
Тебе уже написали, это надо делать на WM_INITDIALOG. Раз создаешь окно через CreateDialog, значит, это сообщение приходит. -------------------- ... |
|||
|
||||
| Edik |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 13.9.2006 Репутация: нет Всего: 1 |
господа, пробовал через WM_INITDIALOG В ЭТОЙ ЖЕ ПРОГРАММЕ и причем тоже лист дроп дауна не заполняеться как и раньше. Где выход?
|
|||
|
||||
| Aleksandor |
|
|||
|
Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
Попробуй hwnd селать static
-------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
1) Убедись, что попадаешь в обработчик WM_INITDIALOG (т.е. что сообщение приходит)
2) Пройди по шагам и убедись, что контрол существует. 3) Дальше в зависимости от результатов -------------------- ... |
|||
|
||||
| Edik |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 13.9.2006 Репутация: нет Всего: 1 |
русская- не ламайся, ты же можешь объяснить популярно. я до WM_INITDIALOG запускал программу, она выполнялась полностью, значит я так понял что WM_INITDIALOG игнорируеться. вот программа.
что дальше?
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Edik, нестандартные способы создания окон - для тех, кто понимает, что делает. И способен сам разобраться в возникающих проблемах.
А ты что делаешь? hwnd=CreateDialog(hInstance, "My", 0, NULL); В CreateDialog второй параметр - должен быть имя шаблона в ресурсах, а последний - диалоговая функция. А у тебя каша какая-то непонятная. Я думаю, у тебя оконная функция либо вовсе не вызывается, либо вызывается как-то криво. Ну чего тебе приспичило так выпендриваться, если ты в простых вещах еще не разобрался? Создай нормальный диалог, как все люди - по шаблону, с нормальной диалоговой функцией - из любой книги спиши пример. Что тебя в стандартном подходе не устраивает? А уж когда пройдешь ликбез - тогда добро пожаловать, извращайся. -------------------- ... |
|||
|
||||
| Edik |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 13.9.2006 Репутация: нет Всего: 1 |
о прекрасный и великий русский жещина, величие которого воспевают в своих поэмах поэты! мне просто такое диалоговое окно надо, что бы подключить к нему меню в строке wndclass.lpszMenuName = NULL ;. так ты поможешь, или мне сразу кончать на этом жизнь самоубийством?
|
|||
|
||||
| Edik |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 13.9.2006 Репутация: нет Всего: 1 |
О прекрасный и великий русский женщина! Как много жгучего русского темперамента в твоих мудрых словах! Я в 8-м классе средней школы брался учить высшую математику- папуля как и ты сейчас выражал свою критику в том же духе. Но я как всегда отвлекаюсь от темы... У меня вышло- я исправил hwnd=CreateDialog(hInstance, "My", 0, (DLGPROC)MyWndProc);, то есть вместо NULL прописал (DLGPROC)MyWndProc и на мое неподдельное удовольствие программа заработала! Только если тебе не покажеться в облом, объясни мне один момент: почему в строке где мы описываем класс wndclass.lpfnWndProc = (WNDPROC)MyWndProc ; надо писать (WNDPROC), а в функции диалога (DLGPROC). я понимаю что параметры такими должны быть именно. но почему? Всмысле почему программа выдает ошибку, когда я делаю wndclass.lpfnWndProc = (DLGPROC)MyWndProc ; и не выдает wndclass.lpfnWndProc = (WNDPROC)MyWndProc ; смысле от классов окон могут порождаться в основном только обычные окна типа MDI и SDI со стандартными типами процедур этих окон? почему нельзя написать сразу wndclass.lpfnWndProc = (DLGPROC)MyWndProc ; -компилятор выдает ошибку о несоответствии типов. Объясни русская- ты ж вумнючая, но тебе иногда бывает лень ко мне в тему заглядывать. Поможешь?
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Если дело только в подключении меню, ты прекрасно мог обойтись ресурсами. Да будет тебе извесно, что в редакторе ресурсорв можно указать меню, которое будет в диалоге.
У тебя есть диалоговый ресурс с именем "My" ? Если нет, то я не понимаю, откуда в твоем диалоге контролы. А если есть - выкини весь код, который регистрирует класс - ничего не изменится. А по поводу твоего вопроса - диалоговая функция и оконная функция - это две РАЗНЫЕ ВЕЩИ. Компилятор выдает ошибку по очевидной причине: ты один тип приравниваешь другому. При регистрации класса указывается ОКОННАЯ функция, а при создании диалога - диалоговая. Тебе не надо регистрировать класс диалога, потому что такой класс в системе уже есть. Кстати, главный цикл тоже не обязательно писать. Вместо него можно использовать встроенный модальный цикл, т.е. просто вызвать DialogBox вместо CreateDialog + цикл обработки сообщений. Таким образом твое супер-приложение сводится к следующему: 1) ресурс-меню 2) диалоговый ресурс 3) диалоговая процедура (вот она может быть длинной) 4) функция WinMain, содержащая ровно одну строку: DialogBox (hInst, "My", 0, DlgProc); Ах да, InitCommonControls, конечно, тоже надо. -------------------- ... |
|||
|
||||
| Edik |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 13.9.2006 Репутация: нет Всего: 1 |
Да русская ты права- это правда получаеться супер-приложение.
Но вот я добавил в программу ресурс меню в режиме дизайна. Дальше- как мне его подключить к диалоговому окну "My"? Есть у меня такое "My" название диалогового окна в ресурсе. Всмысле подключить меню без использования описания класса в программе. Да, я знаю этот способ создания приложения с одной строкой DialogBox (hInst, "My", 0, DlgProc); но не знал как подключить к нему меню без описания класса. Примерчик это весь я содрал с книжонки. И не понимаю зачем в приложениях используеться типа wndclass.lpszClassName = szAppName ;. У меня в ресурсе указано имя диалогового ресурса "My" и имя класса в этом диалоговом ресурсе тоже "My". Зачем еще пишеться какой-то класс? Почему я знаю примеры где описание класса такого типа этого "My" нет? Просто описываться класс в программе и создаеться MDI или SDI приложение. И самое главное хочу знать как подключить твоим способом меню в диалоговый ресурс. И пожалуйста без колкостей- снисходительнее нужно быть красная, снисходительнее. П.С.Приятно провести выходыне! Добавлено @ 19:14 ...и кстати этот примерчик я содрал с программы в которой специально таким образом заменялось WM_ININTDIALOG на WM_CREATE и WM_PAINT- это дает возможность рисовать в диалоговом окне, говорилось в книге. Так как диалоговые окна не обрабатывают WM_PAINT. Вот как получилось это супер-приложение. Чао! |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |