Перемещение контрола ListView по диалогу
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Перемещение контрола ListView по диалогу - 2009-07-08 15:13:27.813333
|
|
|
Klinkogryz
Сообщений: 46
Оценки: 0
Присоединился: 2007-12-02 14:48:54.843333
|
был создан контрол ListView в диалоге(стили LVS_REPORT | LVS_SINGLESEL | LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP). далее в тексте программы были прописаны расширенные стили(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES). в ходе тестирования программы было замечено, что ListView можно перемещать по форме зажав кнопку мыши. Как запретить перемещение данного контрола? среда разработки VS6.
|
|
|
RE: Перемещение контрола ListView по диалогу - 2009-07-08 18:22:54.280000
|
|
|
DenCoder
Сообщений: 49
Оценки: 0
Присоединился: 2009-07-07 19:45:30.303333
|
VS 6 - это MS Visual Studio 6? А компонент какой? Если стандартный List Control с Toolbox в MFC проекте, то вот таких стилей среда не понимает: LVS_EX_FULLROWSELECT LVS_EX_GRIDLINES А так можно добавить Event Handler для WM_MOVE, в котором возвращать не 0. Только придется вручную. Сам не пробовал, но попробовал бы это сделать так (если это MFC проект): - Создаем класс, производный от CListCtrl (это делать вручную) - создаем в диалоге переменную класса - копируем объявление класса от диалога, меняем название, родитель класса - CListCtrl, убираем все ненужное оставляем только enum { IDD = IDC_LIST1 }; DoDataExchange(CDataExchange* pDX); afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() - Добавляем LRESULT CListCtrl::DefWindowProcA(UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_MOVE: return 1; default: return CListCtrl::DefwindowProcA(msg, wParam, lParam); } } ну и в коде соответствующий обработчик OnPaint если без MFC, то гораздо проще (относительно)… :)
|
|
|
RE: Перемещение контрола ListView по диалогу - 2009-07-09 19:53:40.596666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Лист сам по себе так ездить не может. Что-то где-то с обработчиками не то. Ты на апи голом пишешь?
|
|
|
RE: Перемещение контрола ListView по диалогу - 2009-07-10 19:57:12.563333
|
|
|
DenCoder
Сообщений: 49
Оценки: 0
Присоединился: 2009-07-07 19:45:30.303333
|
На голом апи имя класса окна SysListView32. Может, автор опустил подробности. Но с другой стороны, он указал, что в диалоге. А это может означать однозначно - что использовался MFC проект, и неоднозначно - C#, если автор поста там называет форму диалогом, что конечно тоже правильно, но чаще "форма". Если судить по стилям, то все же MFC, есть такой класс CListView. Он производный от CCtrlView и включает в себя ссылку на CListCtrl, у меня он есть, только вот у меня на Toolbox почему-то его нет. Есть только CListCtrl, который как раз использует SysListView32 Несмотря на то, что компилятор ресурсов не понимает LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES, можно их прописать через ф-цию SetWindowLong с параметром GWL_EXT_STYLE, о чем похоже автор и пишет. Логические умозаключения :) Так видимо, в каком-то из обработчиков окно явно двигается. Это возможно, если случайно посылать WM_MOVE, WM_MOVING, WM_WINDOWPOSCHANGING или использовать метод класса MoveWindow.
|
|
|
RE: Перемещение контрола ListView по диалогу - 2009-07-11 01:26:30.480000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
quote:
ORIGINAL: DenCoder он указал, что в диалоге. А это может означать однозначно - что использовался MFC проект, и неоднозначно - C# Не вижу никакой однозначности. Может поясните мне, да и другим желающим? Лично я, под "диалоговым" окном всегда понимал модальное окно. Какое отношение модальные окна имеют к MFC и только к MFC - ума не приложу. Это всё прекрасно реализуется на голом ^^ WinAPI. Тот же мфц - это объектно-ориентированная надстройка над WinAPI. На винапи диалоговые окна можно создать двумя способами: 1. Функцией CreateDialogParam (и подобными) 2. Извращаться с созданием вложенных циклов обработки сообщений и блокировкой других окон. Так что вопрос "а причём тут MFC?" остаётся открытым. —-Added: Теперь по существу. Было замечено, что у листа не выставлен стиль WS_CHILD, что не есть хорошо в данном случае :)
|
|
|
RE: Перемещение контрола ListView по диалогу - 2009-07-11 03:51:30.613333
|
|
|
DenCoder
Сообщений: 49
Оценки: 0
Присоединился: 2009-07-07 19:45:30.303333
|
Соглашусь с _SaZ_
|
|
|
|
|