Я говорю о настольном приложении Windows. Я хочу написать такую функцию, как SelectObject
(например), которая блокирует вызывающего абонента, пока пользователь не нажмет на объект в клиентской области приложения. Как только пользователь выбрал объект, функция возвращает указатель на него.Вторичное сообщение Loop vs Separate Thread Thread
Один из способов сделать это - запустить небольшой цикл сообщений и отфильтровать WM_MOUSE*
, передавая другие сообщения обратно в контур внешнего сообщения. (CRectTracker
делает это я думаю.)
Это также может быть изменено для запуска вызывающего абонента в отдельном потоке его собственного. SelectObject
будет использовать CreateEvent/SetEvent/ResetEvent
для синхронизации с основным потоком, который обрабатывает сообщения мыши и возвращает управление после выполнения условий, удовлетворяющих выбору объекта.
Каковы плюсы и минусы каждого подхода? Где я могу найти дополнительную информацию о таких проектах? Каковы формальные условия для таких вещей?
Программисты, которые внимательно следили или работали с AutoCAD, могут понять, что я так плохо передал здесь.
Пожалуйста, внимательно прочитайте вопрос. Я не говорю о функции SelectObject GDI. – 2010-08-12 11:19:29