003
08.10.2005, 13:24 Uhr
Uwe
C/C++ Master (Administrator)
|
Hallo, Stimmt leider(hab's gerade mal getestet), da kannst Du nur eine Kopie erstellen, etwa so:
C++: |
BOOL CMyDlg::UpdateCBox(CComboBox* pCombo, LPVOID lpParam/*=0*/) { CWnd* pWnd = pCombo->GetNextWindow(GW_HWNDPREV); CWnd* pParent = pCombo->GetParent(); DWORD dwSt = pCombo->GetStyle(); // Sichern der aktuellen Attribute DWORD dwStEx = pCombo->GetExStyle(); CRect rc; pCombo->GetDroppedControlRect(&rc); pParent->ScreenToClient(&rc); UINT nID = pCombo->GetDlgCtrlID(); // Sichern der aktuellen ID CFont* pFont = pCombo->GetFont(); // Sichern des aktuellen Font
// Index der Auswahl sichern int nSel = pCombo->GetCurSel();
CString sText; BOOL bItem = nSel != -1; // und den zugehörigen Text, wenn denn etwas ausgewählt wurde if (bItem) pCombo->GetLBText(nSel, sText); else pCombo->GetWindowText(sText);
// Denke wir haben jetzt alles zusammen um eine neu ComboBox zu erstellen CComboBox cb; if (! cb.CreateEx(dwStEx, _T("COMBOBOX"), _T(""), dwSt, rc, pParent, nID, lpParam)) return FALSE;
// Jetzt den ganzen Weg rückwärts und das Zeugs wieder dorthin, wo es hingehört cb.SetFont(pFont); int iItems = pCombo->GetCount(); for (int i = 0; i < iItems; i++) { CString sText; pCombo->GetLBText(i, sText); int nIndex = cb.AddString(sText); cb.SetItemData(nIndex, pCombo->GetItemData(i)); } if (bItem) cb.SetCurSel(cb.FindStringExact(-1, sText)); else cb.SetWindowText(sText); pCombo->DestroyWindow(); // wir schmeissen die alte Cb HWND hwnd = cb.Detach(); // Handle des neuen Elements holen und im nächsten Schritt // wieder auf unser "altes Element" schreiben pCombo->Attach(hwnd);
// Das ganze wieder an die alte Stelle setzen pCombo->SetWindowPos(pWnd == NULL ? &CWnd::wndBottom : pWnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
return TRUE; }
|
und als Aufruf dann:
C++: |
m_combo.ModifyStyle(CBS_DROPDOWNLIST, CBS_DROPDOWN); UpdateCBox(&m_combo);
|
Hab jedoch keine Überprüfung drin ob alle Zeiger gültig sind und funzen wird es nicht mit lokalen Variablen. -- "Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."
Bis dann... Uwe Dieser Post wurde am 08.10.2005 um 13:24 Uhr von Uwe editiert. |