![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
The Thing |
|
|||
Unregistered |
Народ!!!... Я полное ламерье...часов 5 убил на одну хрень, так и не разобрался...
Призываю программистов на Си++ (MFC). Не могу заставить объект класса CStatic принимать сообщения, т.е. как минимум что бы изменялся текст. При передаче ему данных пишет: "Unhandled exception in file.exe (MFC42D.DLL): 0xC0000005: Access Violation.". /**************************************************************************/ Подробнее: Есть компонент "Static text" класса CStatic с pId: IDC_Static Прописываю значит так...(все, что нарыл в инете..) CStatic *cStr = (CStatic *)(this->GetDlgItem(IDC_STATIC)); //cStr->FromHandled(hWnd); // Я так понял надо передать hWnd объекта...передавал!! cStr->SetWindowText("test"); hWnd я достал 100% правильно сомнений быть не может тестил... даже функцию написал на всяк случай.. пока тестил... //разбирает Диал. окошко. по частям и записывает структуированным деревом в файл.. могу кинуть... кому лень писать: handledtth.h void fun(...) { HWND hWnd; hWnd = ::FindWindow(NULL,"client"); hWnd = ::GetWindow(hWnd, GW_CHILD); char cStr[10]; GetClassName(hWnd, cStr, 10); while(::strcmp(cStr, "Static") !=0) { hWnd = ::GetNextWindow(hWnd, GW_HWNDNEXT); GetClassName(hWnd, cStr, 10); //cStr - Ошибки быть не может.. } CStatic *cstr = (CStatic *)(this->GetDlgItem(IDC_STATIC)); cstr->SetWindowText("test"); } Да!, когда компилю и на последнюю точку ставлю "Stop pointer" тестю cstr выдает: "0x00000000 {CStatic hWnd=???}" Но ведь я присваивал cstr->FromHandle(hWnd);!!!! Вот в принципе и все.. Unhandled exception in file.exe (MFC42D.DLL): 0xC0000005: Access Violation. p.s. После надписи курсор перескакивает в "точку конфликта": //Winocc.cpp ... void CWnd::SetWindowText(LPCTSTR lpszString) { ->/*стрелка*/ ASSERT(::IsWindow(m_hWnd)); if (m_pCtrlSite == NULL) ::SetWindowText(m_hWnd, lpszString); else m_pCtrlSite->SetWindowText(lpszString); } ... /**************************************************************************/ //..-=The Thing=- 11:43 17.08.2004 |
|||
|
||||
Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Замени IDC_STATIC на
IDC_STATIC1 или IDC_МYSTATIC или IDC_MUMBA_YUMBA или на что-нибудь другое. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
Temnozor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 27.6.2002 Где: Тюмень Репутация: нет Всего: нет |
Да. Дело в том что невозможно программно менять текст для элемента с идентификатором IDC_STATIC, так как элементов с таким стандартным идентификатором может быть с диалоге очень много и система не сможет понять к которому из них обращается программа. Так что надо этому элементу присвоить уникальный идентификатор. А если это элемент в чужой программе, то достучаться до него ты не сможешь никак. --------------------
Take a ride on, ride on, on your rotting horse on that deadly ground Take a ride, ride on, on your rotting horse with a pounding sound. |
|||
|
||||
The Thing |
|
|||
Unregistered |
эээ... да, но this->GetDlgItem(IDC_STATIC) указатель именно на объект IDC_STATIC, при чем здесь название....если я его изменю, то я не попаду на свой эллемент, если я правильно понял..
Я работаю со своим приложением... т.е енто не из чужой проги... |
|||
|
||||
Олег М |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
IDC_STATIC это не объект - это идентификатор объекта, а вообще - макрос. Все статические тексты в диалоге имеют этот идентификатор, так что он не является уникальным и ты не можешь получит через него доступ к какому-то конкретному тексту. Для этого надо изменить в редакторе ресурсов идентификатор текста, к которому ты хочешь обратиться на какой-нибудь другой, уникальный для диалога. Тогда ты легко сможешь получить указатель на этот объект через GetDlgItem (это всегда будет указатель на CWnd, неважно какой идентификатор ты указал) потом преобразовать его СStatic
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |