www.pudn.com > ExpBar_src.zip > MainFrm.cpp


// MainFrm.cpp : Implementierung der Klasse CMainFrame 
// 
 
#include "stdafx.h" 
#include "ExpBarSample.h" 
 
#include "MainFrm.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame 
 
IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) 
 
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 
	//{{AFX_MSG_MAP(CMainFrame) 
	ON_WM_CREATE() 
	ON_WM_SETFOCUS() 
	ON_UPDATE_COMMAND_UI(ID_VIEW_EXPLORERBAR, OnUpdateViewExplorerbar) 
	ON_COMMAND(ID_VIEW_EXPLORERBAR, OnViewExplorerbar) 
  ON_MESSAGE(CBM_RELAYMSG, OnExpBarRelayMessage) 
	ON_COMMAND(ID_PINSERT_COL1, OnPinsertCol1) 
	ON_UPDATE_COMMAND_UI(ID_PINSERT_COL1, OnUpdatePinsertCol1) 
	ON_COMMAND(ID_PINSERT_COL2, OnPinsertCol2) 
	ON_UPDATE_COMMAND_UI(ID_PINSERT_COL2, OnUpdatePinsertCol2) 
	ON_COMMAND(ID_PINSERT_COL3, OnPinsertCol3) 
	ON_UPDATE_COMMAND_UI(ID_PINSERT_COL3, OnUpdatePinsertCol3) 
	ON_COMMAND(ID_PINSERT_EXP1, OnPinsertExp1) 
	ON_UPDATE_COMMAND_UI(ID_PINSERT_EXP1, OnUpdatePinsertExp1) 
	ON_COMMAND(ID_PINSERT_EXP2, OnPinsertExp2) 
	ON_UPDATE_COMMAND_UI(ID_PINSERT_EXP2, OnUpdatePinsertExp2) 
	ON_COMMAND(ID_PINSERT_EXP3, OnPinsertExp3) 
	ON_UPDATE_COMMAND_UI(ID_PINSERT_EXP3, OnUpdatePinsertExp3) 
	ON_COMMAND(ID_REMOVE_PANE1, OnRemovePane1) 
	ON_UPDATE_COMMAND_UI(ID_REMOVE_PANE1, OnUpdateRemovePane1) 
	ON_COMMAND(ID_REMOVE_PANE2, OnRemovePane2) 
	ON_UPDATE_COMMAND_UI(ID_REMOVE_PANE2, OnUpdateRemovePane2) 
	ON_COMMAND(ID_REMOVE_PANE3, OnRemovePane3) 
	ON_UPDATE_COMMAND_UI(ID_REMOVE_PANE3, OnUpdateRemovePane3) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
 
 
static UINT indicators[] = 
{ 
	ID_SEPARATOR,           // Statusleistenanzeige 
	ID_INDICATOR_CAPS, 
	ID_INDICATOR_NUM, 
	ID_INDICATOR_SCRL, 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame Konstruktion/Zerstörung 
 
CMainFrame::CMainFrame() 
{ 
} 
 
CMainFrame::~CMainFrame() 
{ 
} 
 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
		return -1; 
	// create a view to occupy the client area of the frame 
	if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, 
		CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) 
	{ 
		TRACE0("Failed to create view window\n"); 
		return -1; 
	} 
	 
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP 
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || 
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) 
	{ 
		TRACE0("Symbolleiste konnte nicht erstellt werden\n"); 
		return -1;      // Fehler bei Erstellung 
	} 
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); 
 
	if (!m_wndStatusBar.Create(this) || 
		!m_wndStatusBar.SetIndicators(indicators, 
		  sizeof(indicators)/sizeof(UINT))) 
	{ 
		TRACE0("Statusleiste konnte nicht erstellt werden\n"); 
		return -1;      // Fehler bei Erstellung 
	} 
 
  m_bPaneVisible[0] = m_bPaneVisible[1] = m_bPaneVisible[2] = FALSE; 
  m_uProgress = 0L; 
 
  if (!m_wndExpBar.Create(_T("Explorer Bar"), this, 123, CBRS_LEFT|CBRS_SIZE_DYNAMIC)) 
//  if (!m_wndExpBar.Create(_T("Explorer Bar"), this, 123, CBRS_RIGHT|CBRS_SIZE_DYNAMIC)) 
  { 
    TRACE0("Failed to create explorer bar\n"); 
    return -1;      // fail to create 
 	} 
 
  m_wndExpBar.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT); 
 
  m_hBigIcon = CreateImageList(AfxGetApp()->m_hInstance,IDB_FOLDER, 
                               48,RGB(0xFF,0x00,0xFF),&m_uNumIcons,NULL,NULL,NULL); 
 
  m_hTaskLinkIcons[1] = CreateImageList(AfxGetApp()->m_hInstance,IDB_IMAGELIST, 
                                        16,RGB(123,124,125),&m_uNumIcons,NULL,&m_hTaskLinkIcons[2], 
                                        &m_hTaskLinkIcons[0]); 
 
 
	EnableDocking(CBRS_ALIGN_ANY); 
 
#ifdef _SCB_REPLACE_MINIFRAME 
  m_pFloatingFrameClass = RUNTIME_CLASS(CSCBMiniDockFrameWnd); 
#endif 
 
	DockControlBar(&m_wndToolBar); 
  DockControlBar(&m_wndExpBar); 
 
	return 0; 
} 
 
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	if( !CFrameWnd::PreCreateWindow(cs) ) 
		return FALSE; 
	cs.dwExStyle &= ~WS_EX_CLIENTEDGE; 
	cs.lpszClass = AfxRegisterWndClass(0); 
	return TRUE; 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame Diagnose 
 
#ifdef _DEBUG 
void CMainFrame::AssertValid() const 
{ 
	CFrameWnd::AssertValid(); 
} 
 
void CMainFrame::Dump(CDumpContext& dc) const 
{ 
	CFrameWnd::Dump(dc); 
} 
 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame Nachrichten-Handler 
void CMainFrame::OnSetFocus(CWnd* pOldWnd) 
{ 
	// Fokus an das Ansichtfenster weitergeben 
	m_wndView.SetFocus(); 
} 
 
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
{ 
	// Ansichtfenster erhält ersten Eindruck vom Befehl 
	if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) 
		return TRUE; 
 
	// andernfalls die Standardbehandlung durchführen 
	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); 
} 
 
void CMainFrame::OnUpdateViewExplorerbar(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(); 
	pCmdUI->SetCheck(m_wndExpBar.IsVisible()); 
} 
 
void CMainFrame::OnViewExplorerbar()  
{ 
	BOOL bShow = m_wndExpBar.IsVisible(); 
	ShowControlBar(&m_wndExpBar, !bShow, FALSE); 
} 
 
LRESULT CMainFrame::OnExpBarRelayMessage ( WPARAM wParam, LPARAM lParam ) 
{ 
  PRELAYMSG   pRM; 
 
  if ((wParam==sizeof(RELAYMSG)) && (lParam)) 
  { 
    pRM = (PRELAYMSG)lParam; 
 
#ifdef _DEBUG 
    TCHAR       szString[256]; 
    wsprintf(szString,"RELAY(id=%08lX): hwnd=%08lX, msg=%08lX, wParam=%08lX, lParam=%08lX\r\n", 
      pRM->uPaneId,pRM->hwndDlg,pRM->message,pRM->wParam,pRM->lParam); 
    OutputDebugString(szString); 
#endif 
 
    if (pRM->message==WM_NOTIFY) 
    { 
      LPNMTTDISPINFO lpnmtdi = (LPNMTTDISPINFO) pRM->lParam; 
 
      if (lpnmtdi->hdr.code==CHN_GETDISPINFO) 
      { 
        wsprintf(lpnmtdi->szText,_T("pane=%lu: tooltip text for colheader %lu"),pRM->uPaneId,lpnmtdi->hdr.idFrom); 
        return TRUE; 
      } 
      else 
      if (lpnmtdi->hdr.code==TLN_GETDISPINFO) 
      { 
        wsprintf(lpnmtdi->szText,_T("pane=%lu: tooltip text for tasklink %lu"),pRM->uPaneId,lpnmtdi->hdr.idFrom); 
        return TRUE; 
      } 
      return FALSE; 
    } 
 
    switch(pRM->uPaneId) 
    { 
      case IDD_PANEDLG1: 
        switch(pRM->message) 
        { 
          case WM_INITDIALOG: 
            m_wndExpBar.ThreadSendDlgItemMessage(pRM->hwndDlg,ID_APP_ABOUT, 
                                                 TLM_SETIMAGES,14,(LPARAM)m_hTaskLinkIcons); 
            m_wndExpBar.ThreadSendDlgItemMessage(pRM->hwndDlg,IDC_CUSTOM2, 
                                                 TLM_SETIMAGES,15,(LPARAM)m_hTaskLinkIcons); 
            m_wndExpBar.ThreadSendDlgItemMessage(pRM->hwndDlg,IDC_CUSTOM3, 
                                                 TLM_SETIMAGES,16,(LPARAM)m_hTaskLinkIcons); 
            return TRUE; 
 
          case WM_COMMAND: 
            SendMessage(pRM->message,pRM->wParam,pRM->lParam); 
            return TRUE; 
 
          default: 
            break; 
        } 
        break; 
 
      case IDD_PANEDLG2: 
        break; 
 
      case IDD_PANEDLG3: 
        switch(pRM->message) 
        { 
          case WM_INITDIALOG: 
            m_wndExpBar.ThreadSendDlgItemMessage(pRM->hwndDlg,IDC_COMBO1, 
                                                 CB_ADDSTRING,0,(LPARAM)_T("Combobox Item 1")); 
            m_wndExpBar.ThreadSendDlgItemMessage(pRM->hwndDlg,IDC_COMBO1, 
                                                 CB_ADDSTRING,0,(LPARAM)_T("Combobox Item 2")); 
            m_wndExpBar.ThreadSendDlgItemMessage(pRM->hwndDlg,IDC_COMBO1, 
                                                 CB_ADDSTRING,0,(LPARAM)_T("Combobox Item 3")); 
 
            m_wndExpBar.CheckRadioButton(pRM->hwndDlg,IDC_CUSTOM6,IDC_CUSTOM8,IDC_CUSTOM6); 
             
            m_wndExpBar.ThreadSendDlgItemMessage(pRM->hwndDlg,IDC_PROGRESS1, 
                                                 PBM_SETRANGE32,0,10); 
            ::SetTimer(pRM->hwndDlg,1,500,NULL); 
            return TRUE; 
 
          case WM_DESTROY: 
            ::KillTimer(pRM->hwndDlg,1); 
            return FALSE; 
 
          case WM_TIMER: 
            m_uProgress++; 
            if (m_uProgress==11) 
              m_uProgress=0; 
            m_wndExpBar.ThreadSendDlgItemMessage(pRM->hwndDlg,IDC_PROGRESS1, 
                                                 PBM_SETPOS,m_uProgress,0); 
            return TRUE; 
 
          case WM_COMMAND: 
            if (HIWORD(pRM->wParam)==BN_CLICKED) 
            switch(LOWORD(pRM->wParam)) 
            { 
              case IDC_CUSTOM6: 
                m_wndExpBar.CheckRadioButton(pRM->hwndDlg,IDC_CUSTOM6,IDC_CUSTOM8,IDC_CUSTOM6); 
                break; 
              case IDC_CUSTOM7: 
                m_wndExpBar.CheckRadioButton(pRM->hwndDlg,IDC_CUSTOM6,IDC_CUSTOM8,IDC_CUSTOM7); 
                break; 
              case IDC_CUSTOM8: 
                m_wndExpBar.CheckRadioButton(pRM->hwndDlg,IDC_CUSTOM6,IDC_CUSTOM8,IDC_CUSTOM8); 
                break; 
 
              default: 
                break; 
            } 
            SendMessage(pRM->message,pRM->wParam,pRM->lParam); 
            return TRUE; 
 
          default: 
            break; 
        } 
        break; 
 
      default: 
        break; 
    } 
  } 
  return FALSE; 
} 
 
void CMainFrame::OnPinsertCol1()  
{ 
  if (m_bPaneVisible[0]) return; 
  m_bPaneVisible[0] = TRUE; 
  m_wndExpBar.AddPane(IDD_PANEDLG1,_T("Pane #1 (fade effect)"), 
                      CHS_FOCUSRECT|CHS_NOSETFOCUSONCLICK|CHS_TOOLTIP| 
                      CHS_PLAYSOUND|CHS_ANIMATEFADE,MAKEINTRESOURCE(IDD_PANEDLG1),this); 
} 
 
void CMainFrame::OnUpdatePinsertCol1(CCmdUI* pCmdUI)  
{ 
  pCmdUI->Enable(!m_bPaneVisible[0]); 
} 
 
void CMainFrame::OnPinsertCol2()  
{ 
  if (m_bPaneVisible[1]) return; 
  m_bPaneVisible[1] = TRUE; 
  m_wndExpBar.AddPane(IDD_PANEDLG2,_T("Pane #2 (no effect)"), 
                      CHS_FOCUSRECT|CHS_NOSETFOCUSONCLICK|CHS_TOOLTIP| 
                      CHS_PLAYSOUND|CHS_SPECIALGROUP,MAKEINTRESOURCE(IDD_PANEDLG2),this, 
                      m_hBigIcon,0,-1); 
} 
 
void CMainFrame::OnUpdatePinsertCol2(CCmdUI* pCmdUI)  
{ 
  pCmdUI->Enable(!m_bPaneVisible[1]); 
} 
 
void CMainFrame::OnPinsertCol3()  
{ 
  if (m_bPaneVisible[2]) return; 
  m_bPaneVisible[2] = TRUE; 
  m_wndExpBar.AddPane(IDD_PANEDLG3,_T("Pane #3 (roll effect)"), 
                      CHS_FOCUSRECT|CHS_NOSETFOCUSONCLICK|CHS_TOOLTIP| 
                      CHS_PLAYSOUND|CHS_ANIMATEROLL,MAKEINTRESOURCE(IDD_PANEDLG3),this); 
} 
 
void CMainFrame::OnUpdatePinsertCol3(CCmdUI* pCmdUI)  
{ 
  pCmdUI->Enable(!m_bPaneVisible[2]); 
} 
 
void CMainFrame::OnPinsertExp1()  
{ 
  if (m_bPaneVisible[0]) return; 
  m_bPaneVisible[0] = TRUE; 
  m_wndExpBar.AddPane(IDD_PANEDLG1,_T("Pane #1 (fade effect)"), 
                      CHS_FOCUSRECT|CHS_NOSETFOCUSONCLICK|CHS_TOOLTIP|CHS_CREATEEXPANDED| 
                      CHS_PLAYSOUND|CHS_ANIMATEFADE,MAKEINTRESOURCE(IDD_PANEDLG1),this); 
} 
 
void CMainFrame::OnUpdatePinsertExp1(CCmdUI* pCmdUI)  
{ 
  pCmdUI->Enable(!m_bPaneVisible[0]); 
} 
 
void CMainFrame::OnPinsertExp2()  
{ 
  if (m_bPaneVisible[1]) return; 
  m_bPaneVisible[1] = TRUE; 
  m_wndExpBar.AddPane(IDD_PANEDLG2,_T("Pane #2 (no effect)"), 
                      CHS_FOCUSRECT|CHS_NOSETFOCUSONCLICK|CHS_TOOLTIP|CHS_CREATEEXPANDED| 
                      CHS_PLAYSOUND|CHS_SPECIALGROUP,MAKEINTRESOURCE(IDD_PANEDLG2),this, 
                      m_hBigIcon,0,-1); 
} 
 
void CMainFrame::OnUpdatePinsertExp2(CCmdUI* pCmdUI)  
{ 
  pCmdUI->Enable(!m_bPaneVisible[1]); 
} 
 
void CMainFrame::OnPinsertExp3()  
{ 
  if (m_bPaneVisible[2]) return; 
  m_bPaneVisible[2] = TRUE; 
  m_wndExpBar.AddPane(IDD_PANEDLG3,_T("Pane #3 (roll effect)"), 
                      CHS_FOCUSRECT|CHS_NOSETFOCUSONCLICK|CHS_TOOLTIP|CHS_CREATEEXPANDED| 
                      CHS_PLAYSOUND|CHS_ANIMATEROLL,MAKEINTRESOURCE(IDD_PANEDLG3),this); 
} 
 
void CMainFrame::OnUpdatePinsertExp3(CCmdUI* pCmdUI)  
{ 
  pCmdUI->Enable(!m_bPaneVisible[2]); 
} 
 
void CMainFrame::OnRemovePane1()  
{ 
  if (!m_bPaneVisible[0]) return; 
  m_bPaneVisible[0] = FALSE; 
  m_wndExpBar.DelPane(IDD_PANEDLG1); 
} 
 
void CMainFrame::OnUpdateRemovePane1(CCmdUI* pCmdUI)  
{ 
  pCmdUI->Enable(m_bPaneVisible[0]); 
} 
 
void CMainFrame::OnRemovePane2()  
{ 
  if (!m_bPaneVisible[1]) return; 
  m_bPaneVisible[1] = FALSE; 
  m_wndExpBar.DelPane(IDD_PANEDLG2); 
} 
 
void CMainFrame::OnUpdateRemovePane2(CCmdUI* pCmdUI)  
{ 
  pCmdUI->Enable(m_bPaneVisible[1]); 
} 
 
void CMainFrame::OnRemovePane3()  
{ 
  if (!m_bPaneVisible[2]) return; 
  m_bPaneVisible[2] = FALSE; 
  m_wndExpBar.DelPane(IDD_PANEDLG3); 
} 
 
void CMainFrame::OnUpdateRemovePane3(CCmdUI* pCmdUI)  
{ 
  pCmdUI->Enable(m_bPaneVisible[2]); 
}