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 |