Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > SetWindowPos некорректно работает параметр pWndIns


Автор: VisualCLamer 6.8.2008, 14:25
Возник такой вопрос:
создаю в Visual C++ 6.0 DialogBased приложение с помощью мастера! На диалог добавляю список (List Box) и большое поле (Edit Box) для ввода текста! Заполняю список.

Фишка вся в том, что список и поле пересекаются, и нужно сделать так чтобы список находился выше по оси Z.

Если оставить всё по умолчанию, то список видно (он находится выше поля), но при нажатии на пересекаюмую элементами область мышкой, попадаешь почему-то в поле.

Чтобы решить эту проблемуиспользую функцию:
BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags);

Параметр pWndInsertAfter как раз для расположения по оси Z.

для списка:
m_listtest1.SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);

для поля:
m_edittest1.SetWindowPos(&wndBottom, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);

После использования функции поле находится выше писка, но при нажатии на пересекаюмую область мышкой, попадаешь на список, и одна строка становится видной!
Остальные варианты для pWndInsertAfter (wndTopMost, wndNoTopMost) не лечат проблему.

Подскажите как быть? Может быть есть другое средство для расположения элементов по Z?

Автор: Earnest 7.8.2008, 11:16
Попробуй списку поставить стиль CLIPSIBLINGS, но не уверена, что поможет...
Еще можно попробовать на диалоге ловить все мышиные сообщения, и проверять их позицию: если она в поле пересечения - явно передавай списку и возвращай true

Но вообще - какое-то кривое решение: зачем нужно пересекать 2 контрола? Это и некрасиво и геморройно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)