Вопрос № 46012: Знакома ль такая штука?!
Создаю MFC-проект, имеется StatusBar.
Шмёшь Button и запускается рабочий поток
(ну скажем - AfxBeginThread(СalcIntegral, this);)
UINT СalcIntegral(LPVOID lpParam)
{
CMyWnd * wnd = (CMyWnd*)...Вопрос № 46038: Уважаемые эксперты, подскажите как получить handle окна windows и его элементам?...Вопрос № 46042: Здраствуйте. У меня возникает проблема при написании легкой програмы на С++ builder 6. Я хочу выдать при работе с циклом в одну строчку(в label,statictext или в мемо) сообщение или цифры, чтобы они не замещали друг друга во время цикла....
Вопрос № 46.012
Знакома ль такая штука?!
Создаю MFC-проект, имеется StatusBar.
Шмёшь Button и запускается рабочий поток
(ну скажем - AfxBeginThread(СalcIntegral, this);)
UINT СalcIntegral(LPVOID lpParam)
{
CMyWnd * wnd = (CMyWnd*)lpParam;
char pos[10];
// ... проверки всякие
// запускаем цикл вычисления
for(int i=0;i<.......
{
// ....считает какая-нибудь функция
wnd->m_ProgressBar.SetPos(100*i/Max); // работает нормально
Отвечает: gitter
Здравствуйте, Яковлев Сергей Павлович!
Действительно, в Debug версии срабатывает 2-й ASSERT ниже, в вызове функции CWnd::AssertValid
// should also be in the permanent or temporary handle map
И действительно, функция afxMapHWND() возвращает карты [текущего] потока,
но в потоке, который Вы создаете этих карт нет (т.е. LookupPermanent(m_hWnd)==NULL).
Но в Release'е Вы этого ASSERT'а не увидите
Поэтому, предлагаю такое решение проблемы:
в DEBUG версии не показывать результаты в строку статуса, а в Release'е - показывать, т.е. необходимо будет сделать следующее
Ответ отправил: gitter (статус: 5-ый класс)
Ответ отправлен: 12.06.2006, 23:18 Оценка за ответ: 4 Комментарий оценки: В release'е работает прога очень плохо, т.е. в StatusBar'е то выходят цифорки, то не выходят
Вопрос № 46.038
Уважаемые эксперты, подскажите как получить handle окна windows и его элементам?
Отправлен: 12.06.2006, 22:14
Вопрос задал: Azrr (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 5)
Отвечает: Татьяна
Здравствуйте, Azrr!
Все зависит от того, какие окна (ваши или чужие) вам надо искать.
Существует возможность поиска окна по заголовку (FindWindow)
Для поиска дочерних окон необходимо использвать функцию getWindow c флагом GW_CHILD.
Справка по этим функциям в приложении. Желаю удачи!
Приложение:
--------- Возможно все. И ничего возможно тоже.
Ответ отправила: Татьяна (статус: Студент)
Ответ отправлен: 13.06.2006, 12:00 Оценка за ответ: 5
Доступ к "элементам" можно получить через их handle, т.к. это тоже окна, чтобы по детям окна попрыгать можно использовать
GetWindow
Контактировать с окнами можно посылая им всякие сообщения.
Ну например через GetWindowLong/SetWindowLong
Чтобы по загруженным модулям попрыгать можно использовать
CreateToolhelp32Snapshot
Module32First
Module32Next
А вообще самое верхнее окно - рабочий стол, к нему привязаны вообще все окна, получить его можно так:
GetDesktopWindow
--------- Успех неизбежен
Ответ отправил: Zitz (статус: Студент)
Ответ отправлен: 13.06.2006, 12:16 Оценка за ответ: 5
Вопрос № 46.042
Здраствуйте. У меня возникает проблема при написании легкой програмы на С++ builder 6. Я хочу выдать при работе с циклом в одну строчку(в label,statictext или в мемо) сообщение или цифры, чтобы они не замещали друг друга во время цикла.
Отправлен: 12.06.2006, 22:31
Вопрос задал: HITY (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 5)
Отвечает: DeVampir
Здравствуйте, HITY!
Попобуйте не присваивать текст в Label, а добавлять
for (int i = 0; i < 10; i++)
Label1.Caption = Label1.Caption + StrToInt(i);
можно между ними еще и пробел добавлять
--------- Нам будет трудно - это терпимо! (с) М. Горшенев
Ответ отправил: DeVampir (статус: 1-ый класс)
Ответ отправлен: 13.06.2006, 17:41