Я создаю проект с Feature Pack MFC. У этого проекта у меня есть окно, которое включает в себя CView
, который включает в себя объект CListCtrl
. Объект включает в себя флаг LVS_EDITLABELS
.Невозможно отредактировать ярлыки в CListCtrl
Как-то я не могу отредактировать ярлыки значков CListCtrl
двумя щелчками (не двойным щелчком) на ярлыке значка. После того, как я выбираю элемент одним щелчком мыши, второй щелчок просто мигает над элементом (кнопка вниз превращает текст в белый, кнопка вернет его к синему), и элемент управления редактирования никогда не появляется.
Я уменьшил эту проблему до простейшей формы и даже с простым объектом CListCtrl
. Я не могу редактировать этикетки.
Я также обнаружил, что:
Эта проблема возникает в VS2008. Это не происходит в аналогичном проекте, построенном в VS2003.
Я могу редактировать ярлыки, если я создаю
CListView
вместоCView
+CListCtrl
.Я также могу отредактировать ярлыки, если я построю
CFormView
и поместилCListCtrl
в диалог ресурсов.
Вот некоторый код в простейшей форме: .h файл:
// vwTerminaisTeste.h
//
#pragma once
// vwTerminaisTeste view
class vwTerminaisTeste : public CView
{
DECLARE_DYNCREATE(vwTerminaisTeste)
protected:
vwTerminaisTeste(); // protected constructor used by dynamic creation
virtual ~vwTerminaisTeste();
CListCtrl m_lstTerminais;
protected:
DECLARE_MESSAGE_MAP()
virtual void OnDraw(CDC* /*pDC*/);
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
};
и файл .cpp:
// vwTerminaisTeste.cpp : implementation file
//
#include "stdafx.h"
#include "vwTerminaisTeste.h"
// vwTerminaisTeste
IMPLEMENT_DYNCREATE(vwTerminaisTeste, CView)
vwTerminaisTeste::vwTerminaisTeste()
{
}
vwTerminaisTeste::~vwTerminaisTeste()
{
}
BEGIN_MESSAGE_MAP(vwTerminaisTeste, CView)
ON_WM_CREATE()
ON_WM_SIZE()
END_MESSAGE_MAP()
// vwTerminaisTeste message handlers
void vwTerminaisTeste::OnDraw(CDC* /*pDC*/)
{
CDocument* pDoc = GetDocument();
}
int vwTerminaisTeste::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
m_lstTerminais.Create(WS_CHILD | WS_VISIBLE | LVS_EDITLABELS, CRect(0,0,1,1), this, 0);
m_lstTerminais.InsertItem(0, "Teste", 0);
return 0;
}
void vwTerminaisTeste::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
if (IsWindow(m_lstTerminais.GetSafeHwnd()))
m_lstTerminais.MoveWindow(0, 0, cx, cy);
}
Таким образом, я не могу редактировать метки. Чтобы изменить его на CListView
я просто заменил CView
на CListView
и m_lstTerminais
по GetListCtrl()
и удалила реализации OnCreate
и OnSize
. Таким образом, это сработало.
Примечание: vwTerminaisTeste
создан из CSplitterWndEx
в классе CMDIChildWndEx
.
Просьба указать код. Каковы все флаги стиля (базовые и расширенные) на CListCtr ?. Можете ли вы показать код, заполняющий список? –
Совет. Если вы действительно хотите, чтобы это ответили, пожертвуйте своей репутацией и приложите щедрость к ней. Тогда люди приложат усилия и попытаются воспроизвести ошибку и т. Д. http://stackoverflow.com/questions/483019/how-does-the-bounty-system-work-in-stackoverflow – sharkin
Почему вам особенно нужен CView + CListCtrl вместо CListView? –