Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Консультации по функциям WinAPI


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Орловский Дмитрий
Статус: Мастер-Эксперт
Рейтинг: 7020
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 3991
∙ повысить рейтинг »
CradleA
Статус: Бакалавр
Рейтинг: 2050
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / WinAPI

Номер выпуска:609
Дата выхода:08.05.2013, 18:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:69 / 29
Вопросов / ответов:3 / 7

Консультация # 34657: Доброе время суток Эксперты!!! Нужна помощь. Есть такие люди которые с помощью WinAPI рисовали окна не прибегая к редакторам, те с помощью функций рисования рамок бордюров или лучше всего использовали ресурсы с кнопками рамками и тд??? Нарисовал в редакторе изображение программы и теперь незнаю как его использовать чтобы моё окно выгляд...


Консультация # 109029: Здравствуйте. Устанавливаю 2 таймера с разным временем срабатывания. При срабатывании таймеров запускаются 2 разных потоках, которые не могут существовать одновременно, т.к. обращаются к одному ресурсу: последовательному порту. Опрос порта должен работать в отдельных потоках, чтобы в это время был доступен пользовательский интерфейс. Чтобы разр...
Консультация # 44360: Здравствуйте. Уважаемые эксперты подскажите как ограничить количество одновременно запущенных зкземпляров приложения....

Консультация # 34657:

Доброе время суток Эксперты!!!
Нужна помощь.
Есть такие люди которые с помощью WinAPI рисовали окна не прибегая к редакторам, те с помощью функций рисования рамок бордюров или лучше всего использовали ресурсы с кнопками рамками и тд???
Нарисовал в редакторе изображение программы и теперь незнаю как его использовать чтобы моё окно выглядело как на рисунке???
И возможно ли ЭТО ???
Если можно то просто примерчик а дальше я сам разберусь!
Огромное спасибо!

Дата отправки: 03.02.2006, 09:14
Вопрос задал: PRiSon
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Алексей Смуриков:

Здравствуйте, PRiSon!
Не совсем понятно что значит нарисовал и в каком редакторе!
Но вот пример нестандартных окон на MASM32...

Консультировал: Алексей Смуриков
Дата отправки: 03.02.2006, 18:52
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Raptor1:

Здравствуйте, PRiSon!
Есть такая замечательная функция, DrawFrameControl которая предназначена для рисования рамок всяких элементов, я видел в одном примере как с ее помощью рисовали CheckBox, более подробно не помогу, не помню где видел

Консультировал: Raptor1
Дата отправки: 04.02.2006, 10:31
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 109029:

Здравствуйте.
Устанавливаю 2 таймера с разным временем срабатывания. При срабатывании таймеров запускаются 2 разных потоках, которые не могут существовать одновременно, т.к. обращаются к одному ресурсу: последовательному порту. Опрос порта должен работать в отдельных потоках, чтобы в это время был доступен пользовательский интерфейс. Чтобы разрулить эту ситуацию, использую функцию API WaitForSingleObject, которая призывает дождаться завершения одного из потоков, если его дескриптор существует, освободить его дескриптор, открыть другой поток, используя для дескриптора освобождённую переменную ThreadHandle (см. секцию case WM_TIMER). Но при накладках, когда не завершился поток запущенный по одному таймеру, скажем, Timer1, а пришло сообщение WM_TIMER от другого таймера, Timer2, программа виснет на WaitForSingleObject. Если вместо

if(ThreadHandle)WaitForSingleObject(ThreadHandle,INFINITE);

использовать

if(ThreadHandle)break;

тогда непонятно, где делать

CloseHandle(ThreadHandle);

Что не так в логике, как сделать правильно?
Спасибо.

Дата отправки: 12.11.2007, 10:54
Вопрос задал: Arcady0602
Всего ответов: 3
Страница онлайн-консультации »


Консультирует mega:

Здравствуйте, Arcady0602!
Я думаю, лучше всего будет отказаться от таймеров, поскольку они синхронизируются очередью сообщений, вместо этого использовать потоки, а таймер генерировать слипом на N мс.(например на секунду: Sleep(1000) ) либо ожиданием внешнего события, типа "аборт", на N мс.(второй вариант корректнее, поскольку позволяет выйти из ожидания преждевременно, например при закрытии программы)

Консультировал: mega
Дата отправки: 12.11.2007, 11:19
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Geograph:

Здравствуйте, Arcady0602!
Можно попробовать обойтись без потоков, двумя простыми функциями, которые будут выполняться последовательно. Хотя не всегда это получается.

Консультировал: Geograph
Дата отправки: 12.11.2007, 12:33
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует PavelGM:

Здравствуйте, Arcady0602!

В такой схеме стоило бы использовать вместо Wait-INFINITE - цикл и интервал напрммер WaitForSingelObject c 1000 и устанавливать флаг нахождения в данном цикле, тогда приход второго таймера можно просто игнорировать или "отложить" (используя например PostMessage), если флаг сообщает о нахождении в цикле освобождения первого потока по первому таймеру. Надеюсь идея понятна :).

Консультировал: PavelGM
Дата отправки: 12.11.2007, 21:04
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 44360:

Здравствуйте. Уважаемые эксперты подскажите как ограничить количество одновременно запущенных зкземпляров приложения.

Дата отправки: 27.05.2006, 06:39
Вопрос задал: Машенцев Сергей Николаевич
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Алексей Смуриков:

Здравствуйте, Машенцев Сергей Николаевич!
1. Это можно сделать спомощью CreateMutex!
Т.е. первое запущенное приложение создаёт этот самый мютекс, а другие посылают сообщения (запуск или выход из той или другой копии)!
2. При запуске программы проверять все процессы и оттыскивать свой и вести подсчёт!

Приложение:

Консультировал: Алексей Смуриков
Дата отправки: 27.05.2006, 08:57
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Vest (Студент):

Здравствуйте, Машенцев Сергей Николаевич!
Если нужно несколько экземпляров, то тут можно всё сделать с помощью семафора: HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // pointer to security attributes
LONG lInitialCount, // initial count - стартовое число - в данном случае - 1 (или ноль)
LONG lMaximumCount, // maximum count - максимальное число возможных "запусков"
LPCTSTR lpName // pointer to semaphore-object name
);
Главное УДАЛЯТЬ потом этот семафор после завершения ПОСЛЕДНЕГО экземпляра приложения.

Консультировал: Vest (Студент)
Дата отправки: 27.05.2006, 19:15
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное