티스토리 뷰

프로그래밍/MFC

탭컨트롤2

에어버스 2019. 1. 26. 12:19

탭 컨트롤 각 탭에 같은 컨트롤을 사용하는 경우 참조 :

각 탭마다 다른 컨트롤을 사용해야 한다면,
Dialog 추가해서 속성에 Border : None, Style : Child 로 설정하고
Dialog 에 원하는 컨트롤 추가해서 클래스 만들어 각 탭에 등록한다.

추가한 Dialog 클래스가 C주문Dlg와 C실시간Dlg 를 C시간Dlg 에 있는 탭컨트롤 위에 표시하는 경우라면 아래 코드처럼 한다.

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
class C시간Dlg : public CDialogEx
{
public:
    void 탭추가();
private:
    CTabCtrl m_TabCtrl;
    C주문Dlg* m_p주문Dlg;
    C실시간Dlg* m_p실시간Dlg;
public:
    afx_msg void OnTcnSelchangeTabDanil(NMHDR *pNMHDR, LRESULT *pResult);
};
 
void C시간Dlg::탭추가()
{
    m_TabCtrl.InsertItem(0, TEXT("정보"));
    m_TabCtrl.InsertItem(1, TEXT("실시간정보"));
    m_TabCtrl.SetCurSel(0);
 
    CRect rect;
    m_TabCtrl.GetWindowRect(&rect);
    
    m_p주문Dlg = new C주문Dlg(this); // 탭에 등록할 dialog 동적 생성
    m_p주문Dlg->Create(IDD_DIALOG_TAB_ORDER, &m_TabCtrl); // C주문Dlg 의 ID가 온다.
    m_p주문Dlg->MoveWindow(025, rect.Width(), rect.Height());
    m_p주문Dlg->ShowWindow(SW_SHOW);
 
    m_p단일가실시간Dlg = new C실시간Dlg(this);
    m_p단일가실시간Dlg->Create(IDD_DIALOG_TAB_REAL, &m_TabCtrl);
    m_p단일가실시간Dlg->MoveWindow(025, rect.Width(), rect.Height());
    m_p단일가실시간Dlg->ShowWindow(SW_HIDE);    
}
 
void C시간Dlg::OnTcnSelchangeTabDanil(NMHDR *pNMHDR, LRESULT *pResult)
{
    int nSel = m_TabCtrl.GetCurSel(); // 탭 선택에 따른 Dialog표시 
    switch (nSel) 
    {
    case 0:
        m_p주문Dlg->ShowWindow(SW_SHOW);
        m_p시간Dlg->ShowWindow(SW_HIDE);
        break;
    case 1:
        m_p주문Dlg->ShowWindow(SW_HIDE);
        m_p실시간Dlg->ShowWindow(SW_SHOW);
        break;
    }
    *pResult = 0;
}
cs

주의>
당연한거지만, 23행의 IDD_DIALOG_TAB_ORDER 는 C주문Dlg 의 ID 이여야 한다.
다른곳에서 코드 가져오는 경우 ID값을 엉뚱하게 지정하면 컴파일은 성공해도 실행 시  DDX 에서 예외발생한다.

추가>
위 코드 각 24행, 29행 바로 아래 ShowWindow()호출하기 전에
m_p주문Dlg->Get주문List()->MoveWindow(0, 0, rect.Width(), rect.Height());
를 추가해서 Dialog와 CListCtrl 사이 여백 제거를 위해 CListCtrl 를 의 MoveWindow() 이동시킨다. 
만약, 수평 스크롤바가 필요할때는 rect.Height()-20 을 하고
수직 스크롤바가 필요하면 rect.Width()-20 을 해주면 된다.

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