MFC Feature Pack を使用してプロジェクトを構築しています。このプロジェクトCView
は、CListCtrl
派生オブジェクトを含む を含むウィンドウがあります。オブジェクトにはLVS_EDITLABELS
フラグが含まれます。
CListCtrl
どういうわけか、アイコン ラベルを (ダブルクリックではなく) 2 回クリックしても、アイコン ラベルを編集できません。1 回のクリックで項目を選択した後、2 回目のクリックで項目が点滅し (ボタンを押すとテキストの背景が白に変わり、ボタンを押すと青に戻ります)、編集コントロールは表示されません。
私はこの問題を最も単純な形に減らしました.単純なCListCtrl
オブジェクトでもラベルを編集することはできません.
また、次のこともわかりました。
この問題は VS2008 で発生します。VS2003 でビルドされた同様のプロジェクトでは発生しません。
+の
CListView
代わりに aを作成すると、ラベルを編集できます。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