Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CListCtrl.Редактируем внутри. Маленькие тайны.МФС, 
:(
    Опции темы
Coocky
Дата 17.11.2004, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Надоело работать с БД с помощью RecordView?Исправим smile
Создаем 2 класса CMyedit:public CEdit и CMyList:public CListCtrl;
ListCtrl со стилем LVS_REPORT+ExtendedStyle FULLROWSELECT и GRID(не помню по аглицки,но стиль репорт,выделение все строки и сетка).см. МСДН SetExtendedStyle()
В CMyedit создаем сообщение WM_POSCHANGING
Код

MyEdit::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
CEdit::OnWindowPosChanging(lpwndpos);
lpwndpos->x=m_x;
lpwndpos->y=m_y;
if (lpwndpos->cx<m_cx)lpwndpos->cx=m_cx;
if (lpwndpos->cy<m_cy)lpwndpos->cy=m_cy;

Добавляем класс CMyedit в CMyList.Создаем обьект m_Edit.Вызываем m_Edit.Create(.......CRect(0,0,0,0)...);
В CMyList создаем обработчик сообщения на двойное нажатие кнопки мыши
в нем пишем
Код

CPoint posMouse;
   GetCursorPos(&posMouse);// получаем координаты щелканья мыши

   ScreenToClient(&posMouse);// переводим

LV_HITTESTINFO htest;//структура листа,малоизвестная многим

htest.pt=posMouse;

htest.flags=0;

   CRect rcItem;
 
MyClass::SubItemHitTest(&htest);//Заполняем  

//получаем координаты столбца
MyClass::GetSubItemRect(htest.iItem,htest.iSubItem,LVIR_LABEL,rcItem);


// подгоняем для красоты
rcItem.bottom=rcItem.bottom-1;
rcItem.right=rcItem.right-1;
m_Edit.m_x=rcItem.left;
   m_Edit.m_y=rcItem.top;

m_Edit.m_cy=rcItem.Height();
m_Edit.m_cx=rcItem.Width();
if(IsWindow(m_Edit.m_hWnd)){

m_Edit.MoveWindow(rcItem,true);//перемещаем
}
}

Поясню:MyEdit::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) избавляет от глюков и дает халявный ресайзинг при изменении размеров.
FULLROWSELECT только этот стиль позволит получит номер стобца.Иначе он будет равен -1.
Убирать или показывать окно CMyEdit можно с помощью m_Edit.ShowWindow(FALSE/TRUE).
А теперь представьте,вместо едита листбокс или комбо или CRichEdit со встроеным OLE контейнером smile И закружило - понесло smile

Это сообщение отредактировал(а) Coocky - 17.11.2004, 16:26


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
CLIPSA
Дата 7.6.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 6.10.2006

Репутация: нет
Всего: 2



Здорово конечно! 
Но мне не нравится, что при FULLROWSELECT выделяется вся строка. Некрасиво. Как это устранить?
И как высоту строк менять? (Хочу таблицу с огромными ячейками  smile )

Это сообщение отредактировал(а) CLIPSA - 7.6.2008, 18:30
PM MAIL   Вверх
Earnest
Дата 10.6.2008, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Изменить высоту строки в листе можно, но только она будет одинаковая для всех строк. Делается просто: создаете картинку-пустышку шириной 1 и высотой какую хотите. Создать на ее основе CImageList и установить его в качесте в лист-контрол (SetImageList).  Именно картинка и определяет высоту строки.
Насчет FULLROWSELECT - просто отключи этот стиль. Coocky неправ, и без него все сработает (в смысле SubItemHitTest). 


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1029 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.