티스토리 뷰

프로그래밍/MFC

MFC 리스트 뷰

에어버스 2016. 7. 10. 12:33

MFC 리스트 뷰

CListView 클래스가 제공하는 대부분의 기능은 리스트 컨트롤을 통해서만 사용할 수 있다.

CListView::GetListCtrl() : 리스트 컨트롤 객체에 대한 참조값(주소)을 얻을 수 있으며 이후 부터는 일반적인 리스트 컨트롤을 다루듯이 코딩하면 된다. (아래 코드 45행 참조)

 

 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
struct MYITEM
{
    CString name;
    int price;
    int quantity;
};
 
class CMFCApplication16Doc : public CDocument
{
...
public:
    MYITEM m_item[100];
};
 
class CMFCApplication16View : public CListView
{
...
public:
    afx_msg void OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult);
    afx_msg void OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult);
    afx_msg void OnTestIconview();
    afx_msg void OnTestSmalliconview();
    afx_msg void OnTestListview();
    afx_msg void OnTestReportview();
};
 
BOOL CMFCApplication16View::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: CREATESTRUCT cs를 수정하여 여기에서
    //  Window 클래스 또는 스타일을 수정합니다.
    cs.style &= ~LVS_TYPEMASK;
    cs.style |= LVS_REPORT;
    return CListView::PreCreateWindow(cs);
}
 
void CMFCApplication16View::OnInitialUpdate()
{
...
    CImageList ilLarge, ilSmall;
    ilLarge.Create(3232, ILC_COLOR4, 11);
    ilSmall.Create(1616, ILC_COLOR4, 11);
    ilLarge.Add(AfxGetApp()->LoadIconW(IDI_MYITEM));
    ilSmall.Add(AfxGetApp()->LoadIconW(IDI_MYITEM));
 
    CListCtrl& list = GetListCtrl();
    list.SetImageList(&ilLarge, LVSIL_NORMAL);
    list.SetImageList(&ilSmall, LVSIL_SMALL);
    ilLarge.Detach();
    ilSmall.Detach();
 
    list.InsertColumn(0, L"상품명", LVCFMT_LEFT, 1000);
    list.InsertColumn(1, L"가격", LVCFMT_LEFT, 1002);
    list.InsertColumn(2, L"수량", LVCFMT_LEFT, 1001);
 
    CMFCApplication16Doc* pDoc = GetDocument();
    CString str;
    for(int i = 0; i < 100; i++)
    {
        list.InsertItem(i, pDoc->m_item[i].name, 0);
        str.Format(L"%d", pDoc->m_item[i].price);
        list.SetItemText(i, 1, str);
        str.Format(L"%d", pDoc->m_item[i].quantity);
        list.SetItemText(i, 2, str);
    }
}
 
void CMFCApplication16View::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    if (pNMLV->uChanged & LVIF_STATE)
    {
        CString str = GetListCtrl().GetItemText(pNMLV->iItem, 0);
        AfxGetMainWnd()->SetWindowTextW(str);
    }
    *pResult = 0;
}
 
void CMFCApplication16View::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    if (pNMItemActivate->iItem != -1)
    {
        CString str = GetListCtrl().GetItemText(pNMItemActivate->iItem, 0);
        MessageBox(str);
    }
    *pResult = 0;
}
 
void CMFCApplication16View::OnTestIconview()
{
    ModifyStyle(LVS_TYPEMASK, LVS_ICON);
}
 
void CMFCApplication16View::OnTestSmalliconview()
{
    ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
}
 
void CMFCApplication16View::OnTestListview()
{
    ModifyStyle(LVS_TYPEMASK, LVS_LIST);
}
 
void CMFCApplication16View::OnTestReportview()
{
    ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
}
cs

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31