При попытке вызова btnOK->SetWindowText() — все в порядке, а вот при попытке вызова btnCancel->SetWindowText() или любого другого валиться с исключением. В чем может быть проблема?
11.11.04 18:21: Перенесено модератором из 'C/C++. Прикладные вопросы' — Odi$$ey
Здравствуйте, Gildor, Вы писали:
G>При попытке вызова btnOK->SetWindowText() — все в порядке, а вот при попытке вызова btnCancel->SetWindowText() или любого другого валиться с исключением. В чем может быть проблема?
В том, что наверное, нет у тебя такого контрола IDC_CANCEL. Вот ты и пытаешься разыменовать объект по нулевому указателю.
Штатный ид для Cancel — это IDCANCEL, хотя, конечно, это твоё дело, как кнопки нумеровать.
К>В том, что наверное, нет у тебя такого контрола IDC_CANCEL. Вот ты и пытаешься разыменовать объект по нулевому указателю. К>Штатный ид для Cancel — это IDCANCEL, хотя, конечно, это твоё дело, как кнопки нумеровать.
Нет, дело в том, что IDC_CANCEL существует. Я тоже сначала думал, что проблема в IDCANCEL и сменил ему ID, но дело в том, что не работают и остальные обращения, к EditBox'ам и Static'ам. Работает только btnOK и все.
Здравствуйте, Gildor, Вы писали:
К>>В том, что наверное, нет у тебя такого контрола IDC_CANCEL. Вот ты и пытаешься разыменовать объект по нулевому указателю. К>>Штатный ид для Cancel — это IDCANCEL, хотя, конечно, это твоё дело, как кнопки нумеровать. G>Нет, дело в том, что IDC_CANCEL существует. Я тоже сначала думал, что проблема в IDCANCEL и сменил ему ID, но дело в том, что не работают и остальные обращения, к EditBox'ам и Static'ам. Работает только btnOK и все.
Попробуйте оттрассировать вызов GetDlgItem(). Скорее всего, MFC/винда не находят окон с указанными идентификаторами (они точно правильные?), после чего Вам и возвращается нулевой указатель, приводящий при попытке разыменования к исключению. Проверьте свое окно спаем (Spy++) и сравните идентификаторы, которые покажет он, с теми, которые в используете в проблемном коде.
[ posted via RSDN@Home 1.1.4 beta 3 r231, accompanied by The Exploited — Now I'm Dead ]
Здравствуйте, Gildor, Вы писали:
G> btnOK = (CButton*) GetDlgItem(IDOK); G> btnCancel = (CButton*) GetDlgItem(IDC_CANCEL); G> edLogin = (CEdit*) GetDlgItem(IDC_EDIT1); G> edPassword = (CEdit*) GetDlgItem(IDC_EDIT2); G> Group = (CStatic*) GetDlgItem(IDC_STATIC1);
G>При попытке вызова btnOK->SetWindowText() — все в порядке, а вот при попытке вызова btnCancel->SetWindowText() или любого другого валиться с исключением. В чем может быть проблема?
Здравствуйте, SchweinDeBurg, Вы писали:
OE>>почему-бы не сделать все по-человечески, через OE>>DDX_Control(pDX, IDC_CANCEL, btnCancel); SDB>Если ID-шники "кривые" (а у меня есть подозрение, что дело именно в этом), то будет валиться точно так же.
если будет связывать контролы с переменными при помощи визарда, то все ID будут честными (до следующей модернизации диалога, уж точно)
Здравствуйте, Odi$$ey, Вы писали:
OE>если будет связывать контролы с переменными при помощи визарда, то все ID будут честными (до следующей модернизации диалога, уж точно)
Тогда-то конечно...
[ posted via RSDN@Home 1.1.4 beta 3 r231, accompanied by The Exploited — Stop The Slaughter ]
А может, ты не к тому диалогу прицепился?
Например, такое бывает, когда есть несколько диалогов с одинаковым идентификатором (в разных DLL'ках, или в resource.h идентификаторы неуникальные).
Попробуй показать этот диалог безо всякой обработки/настройки. Это то, что ты хотел?
Если да, запусти Spy++ или тому подобный инструмент, и посмотри, какие ID'ы у его контролов. Их числовые значения совпадают с тем, что написано в resource.h ?
Наконец, хэндл окна диалога — совпадает с тем, который ты получил?
К>Попробуй показать этот диалог безо всякой обработки/настройки. Это то, что ты хотел? К>Если да, запусти Spy++ или тому подобный инструмент, и посмотри, какие ID'ы у его контролов. Их числовые значения совпадают с тем, что написано в resource.h ? К>Наконец, хэндл окна диалога — совпадает с тем, который ты получил?
Ладно, до понедельника все равно не смогу проверить. На самом деле вся эта писанина — это апплет для Control Panel, который поддерживает *.ini файлы с языками и работает с *NiX сервером по SOAP. Он был реализован с помощью Builder'а и его VCL(каюсь), а потом выяснилось, что апплет-то глючный оказался. Вот и пришлось мне его заново переписывать на VC+MFC. А я (как бы помягче?) в нем не очень. Непривычно. Может быть кто-то подскажет, как можно по-другому работать c Caption'ами. Буду очень благодарен.