Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Перемещение контрола ListView по диалогу

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Перемещение контрола ListView по диалогу
Имя
Сообщение << Старые топики   Новые топики >>
Перемещение контрола 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.
Post #: 1
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?
&nbsp;
А компонент какой? Если стандартный List Control с&nbsp;Toolbox в MFC проекте, то вот таких стилей среда не понимает:
&nbsp;
LVS_EX_FULLROWSELECT
LVS_EX_GRIDLINES
&nbsp;
А так можно добавить Event Handler для WM_MOVE, в котором возвращать не 0.&nbsp;Только придется вручную.&nbsp;Сам не пробовал, но попробовал&nbsp;бы &nbsp;это сделать так (если это MFC проект):
&nbsp;
- Создаем класс, производный от CListCtrl (это делать вручную)
- создаем в диалоге переменную класса
- копируем объявление класса от диалога, меняем название, родитель класса - CListCtrl, убираем все ненужное
&nbsp; оставляем только
&nbsp;&nbsp;&nbsp; enum { IDD = IDC_LIST1 };
&nbsp;&nbsp;&nbsp; DoDataExchange(CDataExchange* pDX);
&nbsp;&nbsp;&nbsp; afx_msg void OnPaint();
&nbsp;&nbsp;&nbsp; DECLARE_MESSAGE_MAP()

- Добавляем LRESULT CListCtrl::DefWindowProcA(UINT msg, WPARAM wParam, LPARAM lParam)
{
&nbsp; switch(msg)
&nbsp; {
&nbsp;&nbsp;case WM_MOVE:
&nbsp;&nbsp;&nbsp; return 1;
&nbsp; default:
&nbsp;&nbsp;&nbsp; return CListCtrl::DefwindowProcA(msg, wParam, lParam);
&nbsp; }
}
&nbsp;
ну и в коде соответствующий обработчик OnPaint

&nbsp;
если без MFC, то&nbsp;гораздо проще (относительно)…&nbsp; :)
Post #: 2
RE: Перемещение контрола ListView по диалогу - 2009-07-09 19:53:40.596666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Лист сам по себе так ездить не может. Что-то где-то с обработчиками не то. Ты на апи голом пишешь?
Post #: 3
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.
Post #: 4
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, что не есть хорошо в данном случае :)
Post #: 5
RE: Перемещение контрола ListView по диалогу - 2009-07-11 03:51:30.613333   
DenCoder

Сообщений: 49
Оценки: 0
Присоединился: 2009-07-07 19:45:30.303333
Соглашусь с _SaZ_
Post #: 6
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Перемещение контрола ListView по диалогу







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.