Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CStatic - "статический текст", Visual C++ 
:(
    Опции темы
The Thing
Дата 21.8.2004, 14:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
Дата 21.8.2004, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Замени IDC_STATIC на
IDC_STATIC1 или
IDC_МYSTATIC или
IDC_MUMBA_YUMBA или
на что-нибудь другое.


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Temnozor
Дата 23.8.2004, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 27.6.2002
Где: Тюмень

Репутация: нет
Всего: нет



Цитата(Dov @ 21.8.2004, 18:58)
Замени IDC_STATIC на
IDC_STATIC1 или
IDC_МYSTATIC или
IDC_MUMBA_YUMBA или
на что-нибудь другое.

Да.
Дело в том что невозможно программно менять текст для элемента с идентификатором 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.
PM   Вверх
The Thing
Дата 2.9.2004, 19:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











эээ... да, но this->GetDlgItem(IDC_STATIC) указатель именно на объект IDC_STATIC, при чем здесь название....если я его изменю, то я не попаду на свой эллемент, если я правильно понял..

Я работаю со своим приложением... т.е енто не из чужой проги...
  Вверх
Олег М
Дата 3.9.2004, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата(The @ 2.9.2004, 22:46)
эээ... да, но this->GetDlgItem(IDC_STATIC) указатель именно на объект IDC_STATIC, при чем здесь название....если я его изменю, то я не попаду на свой эллемент, если я правильно понял..

IDC_STATIC это не объект - это идентификатор объекта, а вообще - макрос. Все статические тексты в диалоге имеют этот идентификатор, так что он не является уникальным и ты не можешь получит через него доступ к какому-то конкретному тексту. Для этого надо изменить в редакторе ресурсов идентификатор текста, к которому ты хочешь обратиться на какой-нибудь другой, уникальный для диалога. Тогда ты легко сможешь получить указатель на этот объект через GetDlgItem (это всегда будет указатель на CWnd, неважно какой идентификатор ты указал) потом преобразовать его СStatic
Код
CStatic *pStatic = (CStatic *)GetDlgItem(IDC_MYTEXT);

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0767 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.