Vert dirty code. Easy to write new than fix your.
Here my solution:
CXTPControl* GetControlPath(int nID, CXTPControls* pControls, CPtrArray& arr) { int nCount = pControls->GetCount();
for (int i = 0; i < nCount; ++i) { CXTPControl* pControl = pControls->GetAt(i);
if(nID == pControl->GetID()) { return pControl; }
if (pControl->GetCommandBar() != NULL) { CXTPControl* p = GetControlPath(nID, pControl->GetCommandBar()->GetControls(), arr); if (p) { arr.InsertAt(0, pControl); return p; } } } return NULL; }
CXTPControl* GetControlPath(CXTPCommandBars* pCommandBars, int nID, CPtrArray& arr) { int nCount = pCommandBars->GetCount(); for (int i = 0; i < nCount; ++i) { CXTPToolBar* pBar = pCommandBars->GetAt(i); CXTPControl* pControl = GetControlPath(nID, pBar->GetControls(), arr); if (pControl) return pControl; }
return NULL; }
void CMainFrame::OnViewShowHide(UINT nID) { int CmdID = ID_EDIT_PASTE_SPECIAL;
CPtrArray arrPath; CXTPControl* pControl = GetControlPath(GetCommandBars(), CmdID, arrPath); if(!pControl) return;
for (int i = 0; i < arrPath.GetSize(); i++) { CXTPControl* pControl = (CXTPControl*)arrPath.GetAt(i);
pControl->GetParent()->SetTrackingMode(TRUE, FALSE, TRUE); pControl->GetParent()->SetSelected(pControl->GetIndex(), TRUE); pControl->GetParent()->SetPopuped(pControl->GetIndex()); }
pControl->GetParent()->SetTrackingMode(TRUE, FALSE, TRUE); pControl->GetParent()->SetSelected(-1);
DWORD dwSleep = 100; int nCnt = 4;
pControl->GetParent()->UpdateWindow(); AfxGetApp()->PumpMessage(); for (int ii = 0; ii < nCnt; ii++) { { CClientDC dc(pControl->GetParent()); dc.Draw3dRect(pControl->GetRect(), 0xFF, 0xFF); } Sleep(dwSleep); pControl->RedrawParent(0); pControl->GetParent()->UpdateWindow(); Sleep(dwSleep); } }
------------- Oleg, Support Team CODEJOCK SOFTWARE SOLUTIONS
|