Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » CB_SETITEMDATA

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
04.11.2004, 22:05 Uhr
~I-Touch
Gast


Hallo,
kennt sich jemand gut mit ComboBoxen aus? Weil ich habe ein Problem mit dem Flag CB_SETITEMDATA. Leider ist das Programm für ein Forum ist es schon zu groß - also jetzt vom Dateiumfang.
Sollte jemand die passenden kenntnisse haben, bitte melde dich eben micht einem post - möchte nicht so einfach die email offen ins forum schreiben.


in großer hoffnung
i-touch
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.11.2004, 22:09 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Und dann? Soll sich jemand durch dein Programm wühlen und nach deinem Fehlersuchen?

Wie wärs wenn du einfach beschreibst was du nicht verstehst bzw. wo das Problem liegt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.11.2004, 22:13 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


einfach den entsprechenden code-block reinstellen, also dinge die du z.b selbst eingefügt hast usw
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.11.2004, 22:51 Uhr
~I-Touch
Gast


also vielen dank schonmal für die antworten.
an Guybrush: nein ich möchte nicht das jemand mein programm duchwühlt, brauche einfach hilfe, habt aber recht mit dem quellcode senden.
p.s stan ist der beste (der verkäufer aus teil I )

ich werde mich morgen nochmal melden - muss leider ins bett

mfg
I-Touch
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.11.2004, 13:10 Uhr
~I-Touch
Gast


So da bin ich wieder - jetzt auch mit quellcode:
Allgemein:
Auf dem Formular befinden sich mehrere Comboboxen. Wenn zum Beispiel bei Combobox 1 etwas geändert wurde, müssen die Comboboxen 2,3,4.... neu mit den Einstellung von eins überprüft werden. Wenn der Knopf OK betätigt wird, werden alle Informationen aus den Comboboxen gelesen und in eine Struktur eingetragen:

C++:
//Allgemein gibt es zu jeder Funktion(also Combobox)  eine Liste, die die Inforamtionen speichert:
//insert setzt hinten an die Liste einen neuen Knoten
//Globle Variblen
List                    *ListGeraetetype;
List                    *ListBildBuffer;
List                    *ListStencialBuffer;


//Wenn Combobox IDC_Geraetetype ausgewähtl wurde, diese Funktion aufrufen:
bool Check_GeraeteType(HWND hWnd)
{
    //Vorbereitungen:
    int            iAdapter        = (int)(SendDlgItemMessage(hWnd,IDC_Adapter,CB_GETCURSEL,0,0));
    int            iIndex;
    D3DDEVTYPE    aDeviceType[]    = {D3DDEVTYPE_HAL,D3DDEVTYPE_REF,D3DDEVTYPE_SW};
    D3D_Info    D3D_Geraetetype;
    D3DCAPS9    Caps;                //Caps-Struktur

    //Liste leeren
    SendDlgItemMessage(hWnd, IDC_Geraetetype, CB_RESETCONTENT,0,0);
    ListGeraetetype->clearList();

    //Jeden Gerätetype durchlaufen
    for(int iGeraeteType = 0; iGeraeteType < 3; iGeraeteType++)
    {
        //Abfragen, ob Gerätetype mit dieser Gerätetype verfügbar ist
        if(SUCCEEDED(pAdapter->GetDeviceCaps(iAdapter,aDeviceType[iGeraeteType],&Caps)))
        {
            //In ComboBox schreiben
            iIndex = (int)SendDlgItemMessage(hWnd,IDC_Geraetetype,CB_ADDSTRING,0,(LPARAM)(ConvertType(aDeviceType[iGeraeteType])));
                    
            //In eine Liste schreiben
            D3D_Geraetetype.DeviceType = aDeviceType[iGeraeteType];
            ListGeraetetype->insertData(D3D_Geraetetype);
            if(CB_ERR ==SendDlgItemMessage(hWnd, IDC_Geraetetype, CB_SETITEMDATA,iIndex,(LPARAM)(ListGeraetetype->getLast())))
            {
                MessageBox(NULL,"Fehler in IDC_Geraetetype ist aufgetreten","Fehler",MB_OK);
            }
        }
    }
    //Anzeige auf die erste Position in der Liste setzen
    SendDlgItemMessage(hWnd, IDC_Geraetetype, CB_SETCURSEL, 0, 0);
    return (true);
}

bool Check_BildBuffer(HWND hWnd)
{
    D3DFORMAT        aFormat[] = {D3DFMT_A2R10G10B10,D3DFMT_X8R8G8B8,D3DFMT_A8R8G8B8,D3DFMT_R5G6B5,D3DFMT_X1R5G5B5,D3DFMT_A1R5G5B5};    
    char            acFormat[150];
    char            acBildBuffer[1200];
    bool            bWindowed;
    bool            bHardwareFormatConversion;
    D3DDISPLAYMODE    CurrentVideoMode;
    D3DDISPLAYMODE*    pSelectedDisplayMode= NULL;
    D3DDEVTYPE*        pSelectedDeviceType    = NULL;

    D3D_Info        D3D_BildBufferInfo;

    //Bis jetzt gesetzte Informationen auslesen
    int            iSelectedAdapter        = (int)(SendDlgItemMessage(hWnd,IDC_Adapter,CB_GETCURSEL,0,0));        //Adatpernummer
    int            iSelectedGeraetetype    = (int)(SendDlgItemMessage(hWnd,IDC_Geraetetype,CB_GETCURSEL,0,0));    //Geraetetypeneummer
    int            iSelectedVideomodus        = (int)(SendDlgItemMessage(hWnd,IDC_Videomodus,CB_GETCURSEL,0,0));    //Geraetetypeneummer
    int            iIndex;

    D3D_Info*    D3D_Videomodus;    
    D3D_Info*    D3D_Geraetetype;
    D3D_Videomodus    =(D3D_Info*)(SendDlgItemMessage(hWnd,IDC_Videomodus,CB_GETITEMDATA,iSelectedVideomodus,0));
    D3D_Geraetetype    =(D3D_Info*)(SendDlgItemMessage(hWnd,IDC_Geraetetype,CB_GETITEMDATA,iSelectedGeraetetype,0));
    
    //Hardware-Gerätetype Korrektur
    if(iSelectedGeraetetype == 0)
        {D3D_Geraetetype->DeviceType = D3DDEVTYPE_HAL;}
    
    //Vollbild oder Fenstermodus abfragen
    bWindowed = IsDlgButtonChecked(hWnd, IDC_Fenstermodus) == BST_CHECKED;
    
    //Liste leeren
    ListBildBuffer->clearList();
    SendDlgItemMessage(hWnd,IDC_BildBuffer,CB_RESETCONTENT,0,0);

    // Aktuellen Videomodus abfragen
    pAdapter->GetAdapterDisplayMode(iSelectedAdapter, &CurrentVideoMode);

    for(int iFormat = 0;iFormat < 6;iFormat++)
    {
        if(SUCCEEDED(pAdapter->CheckDeviceFormat(iSelectedAdapter,
                                        D3D_Geraetetype->DeviceType,
                                        bWindowed ? CurrentVideoMode.Format : D3D_Videomodus->Format,    
                                        D3DUSAGE_RENDERTARGET,
                                        D3DRTYPE_SURFACE,
                                        aFormat[iFormat])))
        {
            if(SUCCEEDED(pAdapter->CheckDeviceType(iSelectedAdapter,
                                                    D3D_Geraetetype->DeviceType,
                                                    bWindowed ? CurrentVideoMode.Format : D3D_Videomodus->Format,
                                                    aFormat[iFormat],
                                                    bWindowed)))
            {
                // Wenn widersprüchliche Formate gewählt wurden, muss eine Formatkonvertierung unterstützt sein.
                bHardwareFormatConversion = true;
                if(bWindowed && aFormat[iFormat] != CurrentVideoMode.Format)
                {
                    if(FAILED(pAdapter->CheckDeviceFormatConversion(iSelectedAdapter,
                                                                      D3D_Geraetetype->DeviceType,
                                                                      CurrentVideoMode.Format,
                                                                      aFormat[iFormat])))
                    {
                        // Hardwarekonvertierung ist nicht möglich!
                        bHardwareFormatConversion = false;
                    }
                }

                if(bHardwareFormatConversion)
                {
                    //Textlisteneintrag generieren
                    sprintf(acFormat,"%s",ConvertBuffer(aFormat[iFormat]));
                    
                    //Wenn Fenstermodus gewählt ist, abfragen ob Hardwarekonvention vorgenommen werden muss
                    if(bWindowed)
                    {
                        sprintf(acBildBuffer,"");
                        if(aFormat[iFormat] != CurrentVideoMode.Format)
                        {
                            sprintf(acFormat,"%s (Hardwarekonv.)",acFormat);
                        }    
                    }
                    
                    D3D_BildBufferInfo.BackBufferFormat = aFormat[iFormat];
                    
                    //In ComboBox schreiben
                    iIndex = (int) SendDlgItemMessage(hWnd, IDC_BildBuffer,CB_ADDSTRING,0,(LPARAM)(acFormat));

                    //Daten in Liste schreiben
                    ListBildBuffer->insertData(D3D_BildBufferInfo);
                    SendDlgItemMessage(hWnd,IDC_BildBuffer,CB_SETITEMDATA,iIndex,(LPARAM)(ListBildBuffer->getLast()));                    
                }
            }
        }
    }
    //Anzeige auf die erste Position in der Liste setzen
    SendDlgItemMessage(hWnd, IDC_BildBuffer, CB_SETCURSEL, 0, 0);
    return (true);
}

//************************************************************************************************

//**************************     StencialBuffer abfragen und setzen in Textform wendeln **********
bool    Check_StencialBuffer(HWND hWnd)
{
    //Jede Menge Code vorher, der nicht benötigt wird
                    //Struktur füllen
                    D3D_StencialBufferInfo.StencialBufferFormat = aFormat[iFormat];
                    
                    //In ComboBox schreiben
                    iIndex = (int) SendDlgItemMessage(hWnd,IDC_StencialBuffer,CB_ADDSTRING,0,(LPARAM)(ConvertBuffer(aFormat[iFormat])));

                    //Daten in Liste schreiben
                    ListStencialBuffer->insertData(D3D_StencialBufferInfo);
                    if(CB_ERR ==SendDlgItemMessage(hWnd,IDC_StencialBuffer,CB_SETITEMDATA,iIndex,(LPARAM)(ListStencialBuffer->getLast())))
                    {
                        MessageBox(NULL,"FEhler","",MB_OK);
                    }
                                    
                    //Formattype in String umwandeln
                    //sprintf(acFormat,"%s",ConvertBuffer(aFormat[iFormat]));    

    //Anzeige auf die erste Position in der Liste setzen
    SendDlgItemMessage(hWnd, IDC_StencialBuffer, CB_SETCURSEL, 0, 0);

    return(true);
}

//Diese Funktion aufrufen, wenn der O.K. Button betätigt wurde:
HRESULT    RegisterD3DDevice    (HWND hWnd)
{

// Die Informationen aus den Listen holen
    int            iAdapter        = (int)(SendDlgItemMessage(hWnd,IDC_Adapter,CB_GETCURSEL,0,0));        //Adatpernummer
    int            iGeraetetype    = (int)(SendDlgItemMessage(hWnd,IDC_Geraetetype,CB_GETCURSEL,0,0));    //Geraetetypeneummer
    int            iVideomodus        = (int)(SendDlgItemMessage(hWnd,IDC_Videomodus,CB_GETCURSEL,0,0));    //Videomodusummer
    int            iBildBuffer        = (int)(SendDlgItemMessage(hWnd,IDC_BildBuffer,CB_GETCURSEL,0,0));    //Bildbuffernummer
    int            iStencialBuffer = (int)(SendDlgItemMessage(hWnd,IDC_StencialBuffer,CB_GETCURSEL,0,0));//Stencialbuffernummer
    D3D_Info*    D3D_Videomodus      = (D3D_Info*)(SendDlgItemMessage(hWnd,IDC_Videomodus,CB_GETITEMDATA,iVideomodus,0));
    D3D_Info*    D3D_Geraetetype      = (D3D_Info*)(SendDlgItemMessage(hWnd,IDC_Geraetetype,CB_GETITEMDATA,iGeraetetype,0));
    D3D_Info*    D3D_StencilBuffer = (D3D_Info*)(SendDlgItemMessage(hWnd,IDC_StencialBuffer,CB_GETITEMDATA,iStencialBuffer,0));
    D3D_Info*    D3D_BildBuffer      = (D3D_Info*)(SendDlgItemMessage(hWnd,IDC_BildBuffer,CB_GETITEMDATA,iBildBuffer,0));
    
//.
//.
//.
    D3DPRESENT_PARAMETERS    D3D_Register;
    D3D_Register.BackBufferHeight            =    D3D_Videomodus->iHoehe;
    D3D_Register.BackBufferWidth            =    D3D_Videomodus->iBreite;
    D3D_Register.BackBufferFormat            =        D3D_BildBuffer->BackBufferFormat;
    D3D_Register.AutoDepthStencilFormat        =    D3D_StencilBuffer->StencialBufferFormat;


//.
//.
//.

    return (S_OK);
}




Leider muss ich feststellen, dass die Struktur D3D_Gerätetype keine Informationen enthält, aber die D3D_BildBuffer-Struktur, obwohl nach der gleichen Methode Daten verarbeitet wurden.

Reicht der Quellcod für den anfang?

Bitte Antworte doch jemand, da ich keine Antwort kenne.

Mfg
I-Touch
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.11.2004, 13:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ja wo ist nun dein problem im code
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.11.2004, 13:22 Uhr
~I-Touch
Gast


Wie zu erkennen ist, schreibe ich mit dem CB_SETITEMDATA zu jeden Eintag einen Zeiger. Beispiel:

ListStencialBuffer->insertData(D3D_StencialBufferInfo);
if(CB_ERR ==SendDlgItemMessage(hWnd,IDC_StencialBuffer,CB_SETITEMDATA,iIndex,(LPARAM)(ListStencialBuffer->getLast())))
{
MessageBox(NULL,"FEhler","",MB_OK);
}

Wenn ich diesen jetzt in der unteresten Funktion abrufe, bekomme ich eine Zeiger zurück, wo nichts mehr in der Struktur steht.
Und jetzt weiß ich nicht was ich falsch gemacht habe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.11.2004, 13:45 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


lass dir mal über nen debugger ausgeben ob überhaupt was reingeschrieben wird, bzw was
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.11.2004, 14:26 Uhr
~I-Touch
Gast


Wie kann ich das machen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.11.2004, 14:28 Uhr
~I-Touch
Gast


also ich habe die liste und die adressen debugt. leider weiß ich nicht wie man testen kann ob die daten überhaupt in die combobox geschrieben werden.
Hinzu müssten doch die daten erfolgreich geschrieben werden, da die daten doch bei if(CB_ERR nicht anschlagen
p.s. bist du über icq zu erreichen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


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: