Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » CComboBox

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
08.10.2005, 08:55 Uhr
oli2006



Wie lässt sich unter VC++ 6 zur Laufzeit der Typ (DROPDOWN / DROPDOWNLIST) einer ComboBox ändern ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.10.2005, 09:42 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
mit der Methode ModifyStyle() der CComboBox
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.10.2005, 10:45 Uhr
oli2006




C++:
m_combo.ModifyStyle(CBS_DROPDOWNLIST, CBS_DROPDOWN);


... führt leider nicht dazu, dass die ComboBox editierbar wird
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.10.2005, 15:59 Uhr
oli2006



Inwiefern läuft es nicht mit lokalen Variablen?? Ich hab in meiner in meinem SDI-Projekt in der View eine Membervariable der Combo-Box aber der obige Aufruf änder leider nichts.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.10.2005, 16:46 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
ich hab mal ein MiniProjekt hochgeladen.
www.fun-soft.de/Download/tmp/Combo.zip
Nicht wundern, hab das Projekt beim Anlegen falsch benannt (swich... statt switch).
--
"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 16:49 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.10.2005, 16:57 Uhr
oli2006



danke, aber kann ich leider mit visual cpp 6 nicht öffnen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.10.2005, 17:01 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
kann mir denken was Du vergessen hast:
Ereignishandler?
CFormView :: DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, m_combo);
.....
Wenn nicht schick ich's nochmal für die 6 Ver.
--
"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 17:02 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
08.10.2005, 17:14 Uhr
oli2006



CFormView :: DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, m_combo);

... sind drin hat ja der App-Wizzard automatisch erzeugt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
08.10.2005, 17:30 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
www.fun-soft.de/Download/tmp/Combo6.zip
VC++6.0 Version.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: