RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'List Control'에 해당되는 글 1
원본 : 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.예제

실제로 클래스를 구성하면 다음과 같다.

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 -
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/02/21 15:41 2007/02/21 15:41
http://www.webdizen.net/blog/trackback/2616
마틴  | 2010/04/03 09:50
좋은 정보 고맙습니다. 잘 보고 갑니다.
[로그인][오픈아이디란?]
webdizen:이 세상에 존재하는 모든 데이터를 체계화하고, 효과적으로 분석하는 그 날까지 이 재미난 연구를 계속해 나갈 생각입니다.

현재 OLAP, Data Warehouse, Data Mining, Cloud Computing, MapReduce, Data Modeling에 대해서 연구하고 있습니다.
이 세상에 존재하는 모든 데이터를 체계화하고, 효과적으로 분석하는 그 날까지 이 재미난 연구를 계속해 나갈 생각입니다. 현재 OLAP, Data Warehouse, Data Mining, Cloud Computing, MapReduce, Data Modeling에 대해서 연구하고 있습니다.
전체 (3018)
Webdizen (145)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Cloud Computing (3)
Programming (807)
Data Modeling (0)
Database (105)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (80)
Security (91)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
«   2010/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
  1. yundream의 프로그래밍 이야기  03/10
    printf,scanf를 이용한 형식화된 입출력
  2. 은마군의 나태블록  2009
    파일 열기/저장하기 CFileDialog
  3. 상우 :: Oranzie's BLOG  2008
    World IT Show 2008
  4. 3인3색  2008
    cvs서버 설치하기
  5. PHP와 Web 2.0  2007
    속속 공개되는 Google Chart Maker
  1. 2010/09 (2)
  2. 2010/08 (2)
  3. 2010/07 (2)
  4. 2010/05 (1)
  5. 2010/04 (2)