BOOL CRollupCtrl::OnCommand(WPARAM wParam, LPARAM lParam) { //PopupMenu command ExpandAllPages if (LOWORD(wParam)==RC_IDM_EXPANDALL) ExpandAllPages(TRUE,TRUE); else if (LOWORD(wParam)==RC_IDM_COLLAPSEALL) ExpandAllPages(FALSE,TRUE); //PopupMenu command ExpandPage else if (LOWORD(wParam)>=RC_IDM_STARTPAGES && LOWORD(wParam)<RC_IDM_STARTPAGES+GetPagesCount()) { int idx = LOWORD(wParam)-RC_IDM_STARTPAGES; int id = m_PageList[idx]->id; ExpandPage(id, !IsPageExpanded(id),TRUE,TRUE ); } //Button command else if (HIWORD(wParam)==BN_CLICKED) { int idx = GetPageIdxFromButtonHWND((HWND)lParam); if (idx!=-1) { RC_PAGEINFO* pi = m_PageList[idx]; ExpandPage(pi->id, !pi->bExpanded,TRUE,TRUE); return 0; } } return CWnd::OnCommand(wParam, lParam); }
//--------------------------------------------------------------------------- // OnCommand //--------------------------------------------------------------------------- BOOL CRollupCtrl::OnCommand(WPARAM wParam, LPARAM lParam) { if (LOWORD(wParam)==RC_MID_COLLAPSEALL) { ExpandAllPages(FALSE); return TRUE; } else if (LOWORD(wParam)==RC_MID_EXPANDALL) { ExpandAllPages(TRUE); return TRUE; } else if (LOWORD(wParam)>=RC_MID_STARTPAGES && LOWORD(wParam)<RC_MID_STARTPAGES+GetPagesCount()) { int idx = LOWORD(wParam)-RC_MID_STARTPAGES; ExpandPage(idx, !IsPageExpanded(idx) ); } else if (HIWORD(wParam)==BN_CLICKED) { int idx = GetPageIdxFromButtonHWND((HWND)lParam); if (idx!=-1) { RC_PAGEINFO* pi = m_PageList[idx]; /****** add some codes to change caption ******/ CString alter; alter = (pi->cstrCaption); if(!pi->bExpanded) { alter.SetAt(0, '-'); SetPageCaption(idx, (LPCSTR)(alter.GetBuffer())); } else { alter.SetAt(0, '+'); SetPageCaption(idx, (LPCSTR)(alter.GetBuffer())); } /****** ******/ ExpandPage(idx, !pi->bExpanded); SetFocus(); return TRUE; } } return CWnd::OnCommand(wParam, lParam); }
//--------------------------------------------------------------------------- // OnCommand //--------------------------------------------------------------------------- BOOL CRollupCtrl::OnCommand(WPARAM wParam, LPARAM lParam) { if (LOWORD(wParam)==RC_MID_COLLAPSEALL) { ExpandAllPages(FALSE); return TRUE; } else if (LOWORD(wParam)==RC_MID_EXPANDALL) { ExpandAllPages(TRUE); return TRUE; } else if (LOWORD(wParam)>=RC_MID_STARTPAGES && LOWORD(wParam)<RC_MID_STARTPAGES+GetPagesCount()) { int idx = LOWORD(wParam)-RC_MID_STARTPAGES; ExpandPage(idx, !IsPageExpanded(idx) ); } else if (HIWORD(wParam)==BN_CLICKED) { int idx = GetPageIdxFromButtonHWND((HWND)lParam); if (idx!=-1) { RC_PAGEINFO* pi = m_PageList[idx]; ExpandPage(idx, !pi->bExpanded); SetFocus(); /* if( IsPageExpanded(2) == true) { CPageInsertDlg pInsertPage; pInsertPage.UpdateEditControls(); } */ return TRUE; } } return CWnd::OnCommand(wParam, lParam); }
int CRollupCtrl::_InsertPage(LPCTSTR caption, CDialog* pwndTemplate, int idx, BOOL bAutoDestroyTpl,BOOL bAutoExpand) { ASSERT(pwndTemplate!=NULL); ASSERT(pwndTemplate->m_hWnd!=NULL); CRect r; GetClientRect(r); CColorCtrl<CButton>* groupbox = new CColorCtrl<CButton>; groupbox->Create("", WS_CHILD|BS_GROUPBOX, r, this, 0 ); if (m_bkColor != 0) { groupbox->SetBkColor(m_bkColor); } CCustomButton* but = new CCustomButton; but->Create(caption, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_FLAT, r, this, 0 ); if (m_bkColor != 0) { but->SetBkColor(m_bkColor); } HFONT hfont= (HFONT)EditorSettings::Get().Gui.hSystemFont; CFont* font = CFont::FromHandle(hfont); but->SetFont(font); RC_PAGEINFO* pi = new RC_PAGEINFO; pi->id = m_lastId++; pi->bExpanded = FALSE; pi->bEnable = TRUE; pi->pwndTemplate = pwndTemplate; pi->pwndButton = but; pi->pwndGroupBox = groupbox; pi->pOldDlgProc = (WNDPROC)::GetWindowLongPtr(pwndTemplate->m_hWnd, DWLP_DLGPROC); pi->pOldButProc = (WNDPROC)::GetWindowLongPtr(but->m_hWnd, GWLP_WNDPROC); pi->bAutoDestroyTpl = bAutoDestroyTpl; int newidx; if (idx<0) { m_PageList.push_back(pi); newidx = m_PageList.size()-1; } else { m_PageList.insert(m_PageList.begin()+idx,pi); newidx=idx; } ::SetWindowLongPtr(pwndTemplate->m_hWnd, GWLP_USERDATA, (LONG_PTR)m_PageList[newidx]); ::SetWindowLongPtr(pwndTemplate->m_hWnd, DWLP_USER, (LONG_PTR)this); ::SetWindowLongPtr(but->m_hWnd, GWLP_USERDATA, (LONG_PTR)m_PageList[newidx]); ::SetWindowLongPtr(pwndTemplate->m_hWnd, DWLP_DLGPROC, (LONG_PTR)CRollupCtrl::DlgWindowProc); ::SetWindowLongPtr(but->m_hWnd, GWLP_WNDPROC, (LONG_PTR)CRollupCtrl::ButWindowProc); m_nPageHeight+=RC_PGBUTTONHEIGHT+(RC_GRPBOXINDENT*2); RecalLayout(); bool bExpanded = stl::FindInMap( m_expandedMap,caption,bAutoExpand==TRUE ); if (bExpanded) { ExpandPage( pi->id,bExpanded,FALSE ); } return pi->id; }