원본 : http://www.debuglab.com/knowledge/listcontrol.html
1.요약
특정 Column에서 다른 Control 을 띄우는 방법 설명.
여기서 사용한 방법은 현재 Cursor가 있는 위치를 파악한후 그 위치에 적당한 크기의 Edit Control를 생성 시킨다.
2.본문
1) CListCtrl를 상속받는 CMyList라는 Class를 만든다.
2) Member변수로 CEdit m_ctrEdit를 선언한다.
3) Member함수로 OnLButtonDown()과 GetSubItemFromPt(point, nItem, nSubItem, rcClient)를 선언
OnLButtonDown() : Edit Control를 생성/삭제 시키는 역할
GetSubItemFromPt(): 현재 Cursor가 있는 곳의 List정보를 가져온다.
4) 함수 내용을 구성한 후(예제 참조) 사용은
CListCtrl m_ctrList에서 CListCtrl ---> CMyList로 바꿔 주면 된다.
3.예제
실제로 클래스를 구성하면 다음과 같다.
4.참고
마우스를 더블 클릭하는 순간에 나타나게 하고 싶다면 마우스 더블 클릭 함수에서 구현해 주면 된다.
몇가지 함수만 추가하면 특정 Column에서만 Control이 나타나게 하는 것을 쉽게 구현 할 수 있을 것이다.
- 2001.08.06 Smile Seo -
1.요약
특정 Column에서 다른 Control 을 띄우는 방법 설명.
여기서 사용한 방법은 현재 Cursor가 있는 위치를 파악한후 그 위치에 적당한 크기의 Edit Control를 생성 시킨다.
2.본문
1) CListCtrl를 상속받는 CMyList라는 Class를 만든다.
2) Member변수로 CEdit m_ctrEdit를 선언한다.
3) Member함수로 OnLButtonDown()과 GetSubItemFromPt(point, nItem, nSubItem, rcClient)를 선언
OnLButtonDown() : Edit Control를 생성/삭제 시키는 역할
GetSubItemFromPt(): 현재 Cursor가 있는 곳의 List정보를 가져온다.
4) 함수 내용을 구성한 후(예제 참조) 사용은
CListCtrl m_ctrList에서 CListCtrl ---> CMyList로 바꿔 주면 된다.
3.예제
실제로 클래스를 구성하면 다음과 같다.
class CMyList : public COXGridList
{
// Construction
public:
CMyList();
// Attributes
public:
CEdit m_ctrEdit;
// Operations
public:
void GetSubItemFromPt(CPoint point, int &nItem, int &nSubItem, CRect &rect);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyList)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMyList();
// Generated message map functions
protected:
//{{AFX_MSG(CMyList)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CMyList::CMyList()
{
}
CMyList::~CMyList()
{
}
BEGIN_MESSAGE_MAP(CMyList, COXGridList)
//{{AFX_MSG_MAP(CMyList)
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyList message handlers
void CMyList::OnLButtonDown(UINT nFlags, CPoint point)
{
int nItem, nSubItem;
CRect rcClient;
// 현재 Point의 영역 정보를 가져온다.
GetSubItemFromPt(point, nItem, nSubItem, rcClient);
// 두번째 SubItem일(두번째 Column) 경우에만 나타나게 함.
if (nSubItem == 1)
{
if (m_ctrTimeEdit.m_hWnd == NULL)
{
// Mask Edit Control 생성
m_ctrEdit.Create
(WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|WS_HSCROLL,
CRect(0, 0, 30, 10), this, 1);
m_ctrEdit.MoveWindow(rcClient);
m_ctrEdit.ShowWindow(SW_SHOW);
}
else
{
m_ctrTimeEdit.MoveWindow(rcClient);
m_ctrTimeEdit.ShowWindow(SW_SHOW);
}
}
else
{
if (m_ctrTimeEdit.m_hWnd != NULL)
{
m_ctrTimeEdit.ShowWindow(SW_HIDE);
}
}
CListCtrl::OnLButtonDown(nFlags, point);
}
void CMyList::GetSubItemFromPt(CPoint point, int &nItem, int &nSubItem, CRect &rect)
{
LVHITTESTINFO lvhti;
// Clear the subitem text the user clicked on.
lvhti.pt = point;
SubItemHitTest(&lvhti);
nItem = lvhti.iItem;
nSubItem = lvhti.iSubItem;
GetSubItemRect(nItem, nSubItem, LVIR_LABEL, rect);
}
4.참고
마우스를 더블 클릭하는 순간에 나타나게 하고 싶다면 마우스 더블 클릭 함수에서 구현해 주면 된다.
몇가지 함수만 추가하면 특정 Column에서만 Control이 나타나게 하는 것을 쉽게 구현 할 수 있을 것이다.
- 2001.08.06 Smile Seo -
"MFC" 카테고리의 다른 글
- 사용자 정의 Common Dialog 만들기 (0)2007/02/21
- 초 간단!! 시스템 이미지 리스트 얻어오기 (0)2007/02/21
- List Control 에 다른 Control 넣기 (0)2007/02/21
- 256색 이상의 Bitmap ImageList 만들기 (0)2007/02/21
- 사용하지 않는 인자에 대한 warning 없애기 (0)2007/02/21
Tags List Control

수안이의 컴퓨터 연구실



Leave your greetings.