// DlgTab.cpp : 구현 파일입니다. // #include "stdafx.h" #include "ReviewSystem.h" #include "DlgTab.h" // CDlgTab 대화 상자입니다. IMPLEMENT_DYNAMIC(CDlgTab, CDialog) CDlgTab::CDlgTab(CWnd* pParent /*=NULL*/) : CDialog(CDlgTab::IDD, pParent) { } CDlgTab::~CDlgTab() { m_vecWndPtr.clear(); m_vecString.clear(); } void CDlgTab::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_TAB_CONTROL, m_ctrlTabCtrl); } BEGIN_MESSAGE_MAP(CDlgTab, CDialog) ON_BN_CLICKED(IDOK, &CDlgTab::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &CDlgTab::OnBnClickedCancel) ON_WM_SIZE() ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_CONTROL, &CDlgTab::OnTcnSelchangeTabControl) // ON_MESSAGE(UM_PROCESS_STATUS_UPDATE, &CDlgTab::OnProcessStatusUpdate) ON_WM_ERASEBKGND() ON_WM_CTLCOLOR() END_MESSAGE_MAP() // CDlgTab 메시지 처리기입니다. void CDlgTab::OnBnClickedOk() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. //OnOK(); } void CDlgTab::OnBnClickedCancel() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. //OnCancel(); } void CDlgTab::InitTabControl() { m_ctrlTabCtrl.DeleteAllItems(); int nIdx = 0; for (VectorStringIt it=m_vecString.begin(); it!=m_vecString.end(); it++) { m_ctrlTabCtrl.InsertItem(nIdx++, *it); } m_ctrlTabCtrl.SetCurSel(0); for (int i=0; i<(int)m_vecWndPtr.size(); i++) { if (m_vecWndPtr[i]==NULL) continue; if (0==i) { m_vecWndPtr[i]->ShowWindow(SW_SHOW); } else { m_vecWndPtr[i]->ShowWindow(SW_HIDE); } } } void CDlgTab::AddWndPtr(CWnd *pWnd, const CString& strName) { if (pWnd==NULL) return; pWnd->SetParent(this); m_vecWndPtr.push_back(pWnd); m_vecString.push_back(strName); InitTabControl(); } void CDlgTab::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: 여기에 메시지 처리기 코드를 추가합니다. if (m_ctrlTabCtrl.GetSafeHwnd()) { m_ctrlTabCtrl.SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOZORDER); } } void CDlgTab::OnTcnSelchangeTabControl(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. int nTabIdx = m_ctrlTabCtrl.GetCurSel(); SetActiveDialog(nTabIdx); if (nTabIdx == 1) { //taek 여기에서 넣어 볼까? } *pResult = 0; } void CDlgTab::SetActiveDialog(int nTabIdx) { if (nTabIdx<0 || nTabIdx>=(int)m_vecWndPtr.size()) return; for (int i=0; i<(int)m_vecWndPtr.size(); i++) { if (m_vecWndPtr[i]==NULL) continue; if (nTabIdx==i) { m_vecWndPtr[i]->ShowWindow(SW_SHOW); } else { m_vecWndPtr[i]->ShowWindow(SW_HIDE); } } m_ctrlTabCtrl.SetCurSel(nTabIdx); } BOOL CDlgTab::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 여기에 추가 초기화 작업을 추가합니다. InitTabControl(); return TRUE; // return TRUE unless you set the focus to a control // 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다. } void CDlgTab::UpdateProcessStatus( int nLineType, int nMachineType, int nProcessStatus, const CGlassResult* pGlassResult ) { switch(nProcessStatus) { case ProcessLoading: SetActiveDialog(0); break; case ProcessAlignStart: SetActiveDialog(2); break; //case ProcessReadRawFile: default: SetActiveDialog(0); break; } } BOOL CDlgTab::OnEraseBkgnd(CDC* pDC) { // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. CRect rect; GetClientRect(&rect); __super::OnEraseBkgnd(pDC); pDC->FillSolidRect(rect, RGB(38,38,38) ); return TRUE; } HBRUSH CDlgTab::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = __super::OnCtlColor(pDC, pWnd, nCtlColor); CRect rect; CString strClass = _T(""); UINT nID = pWnd->GetDlgCtrlID(); if(nCtlColor == CTLCOLOR_STATIC) { pDC->SetTextColor(RGB(255,255,255)); pDC->SetBkColor(RGB(38,38,38)); hbr = (HBRUSH)GetStockObject(NULL_BRUSH); } // TODO: 기본값이 적당하지 않으면 다른 브러시를 반환합니다. return hbr; }