Próbuje edytowac elementy CListCtrl ale mam problem.
Napisałem coś takiego:
#pragma once
// CGListCtrl
class CGListCtrl : public CListCtrl
{
DECLARE_DYNAMIC(CGListCtrl)
public:
CGListCtrl();
virtual ~CGListCtrl();
protected:
DECLARE_MESSAGE_MAP()
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
public:
afx_msg void OnLvnBeginlabeledit(NMHDR *pNMHDR, LRESULT *pResult);
public:
int m_nItem;
public:
int m_nSubItem;
public:
afx_msg void OnLvnEndlabeledit(NMHDR *pNMHDR, LRESULT *pResult);
public:
afx_msg void OnNMClick(NMHDR *pNMHDR, LRESULT *pResult);
};
#include "stdafx.h"
#include "GListCtrl.h"
// CGListCtrl
IMPLEMENT_DYNAMIC(CGListCtrl, CListCtrl)
CGListCtrl::CGListCtrl()
: m_nItem(0)
, m_nSubItem(0)
{
}
CGListCtrl::~CGListCtrl()
{
}
BEGIN_MESSAGE_MAP(CGListCtrl, CListCtrl)
ON_NOTIFY_REFLECT(LVN_BEGINLABELEDIT, &CGListCtrl::OnLvnBeginlabeledit)
ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, &CGListCtrl::OnLvnEndlabeledit)
ON_NOTIFY_REFLECT(NM_CLICK, &CGListCtrl::OnNMClick)
END_MESSAGE_MAP()
// CGListCtrl message handlers
BOOL CGListCtrl::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
cs.style |=
LVS_REPORT |
LVS_EDITLABELS |
WS_BORDER;
return CListCtrl::PreCreateWindow(cs);
}
void CGListCtrl::OnLvnBeginlabeledit(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
// TODO: Add your control notification handler code here
CEdit *pEdit = GetEditControl();
pEdit->SetWindowTextW(GetItemText(m_nItem, m_nSubItem));
*pResult = 0;
}
void CGListCtrl::OnLvnEndlabeledit(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
// TODO: Add your control notification handler code here
CEdit *pEdit = GetEditControl();
ASSERT(pEdit != NULL);
CString strItem;
pEdit->GetWindowTextW(strItem);
SetItemText(m_nItem, m_nSubItem, strItem);
*pResult = 0;
}
void CGListCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
NMITEMACTIVATE* nm=(NMITEMACTIVATE*)pNMHDR;
//zapamietanie kolumny i wiersza klinietego elementu
m_nItem=nm->iItem;
m_nSubItem=nm->iSubItem;
*pResult = 0;
}
Po kliknięciu w dowolny element mogę go edytowac, ale kontrolka 'EDIT' pojawia się tylko w pierwszej kolumnie. Jest jakiś sposób żeby żeby ją przesuwac? Probowałem w OnLvnBeginlabeledit przesuwac, ale bezskutecznie. Wydaje mi się że pozycja edita jest ustawiana później.
Robił już ktoś, coś takiego?