Exemple #1
0
VOID RefreshDisplayAdapter()
{
    /*! save configured display adapter */
    {
        DWORD dwOld = g_XBVideo->GetDisplayAdapter();

        DWORD dwDisplayAdapter = (DWORD)SendMessage(g_hDisplayAdapter, CB_GETCURSEL, 0, 0);

        if(dwDisplayAdapter != dwOld)
        {
            g_bHasChanges = TRUE;

            g_XBVideo->SetDisplayAdapter(dwDisplayAdapter);
        }
    }

    /*! generate list of device types */
    {
        /*! device types */
        static const XTL::D3DDEVTYPE devType[2] = { XTL::D3DDEVTYPE_HAL, XTL::D3DDEVTYPE_REF };

        /*! human readable device types */
        static const char *szDevType[2] = { "Direct3D HAL (Hardware Accelerated)", "Direct3D REF (Software)" };

        /*! clear device listbox */
        SendMessage(g_hDirect3DDevice, CB_RESETCONTENT, 0, 0);

        /*! step through devices types */
        for(uint32 d=0;d<2;d++)
        {
#ifndef D3D9
            XTL::D3DCAPS8 Caps;
#else
            XTL::D3DCAPS9 Caps;
#endif
            /*! verify device is available */
            if(g_pD3D8->GetDeviceCaps(g_XBVideo->GetDisplayAdapter(), devType[d], &Caps) == D3D_OK)
            {
                /*! add device to list */
                SendMessage(g_hDirect3DDevice, CB_ADDSTRING, 0, (LPARAM)szDevType[d]);
            }
        }
    }

    /*! activate configured device */
    SendMessage(g_hDirect3DDevice, CB_SETCURSEL, g_XBVideo->GetDirect3DDevice(), 0);

    /*! refresh based on new device selection */
    RefreshDirect3DDevice();

    return;
}
Exemple #2
0
INT_PTR CALLBACK DlgVideoConfigProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_INITDIALOG:
        {
            g_hDisplayAdapter  = GetDlgItem(hWndDlg, IDC_VC_DISPLAY_ADAPTER);
            g_hDirect3DDevice  = GetDlgItem(hWndDlg, IDC_VC_D3D_DEVICE);
            g_hVideoResolution = GetDlgItem(hWndDlg, IDC_VC_VIDEO_RESOLUTION);

            /*! set window icon */
            SetClassLong(hWndDlg, GCL_HICON, (LONG)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_CXBX)));

            /*! enumerate display adapters */
            {
                SendMessage(g_hDisplayAdapter, CB_RESETCONTENT, 0, 0);

                for(uint32 v=0;v<g_dwAdapterCount;v++)
                {
                    XTL::D3DADAPTER_IDENTIFIER8 adapterIdentifier;

                    g_pD3D8->GetAdapterIdentifier(v, D3DENUM_NO_WHQL_LEVEL, &adapterIdentifier);

                    if(v == 0)
                    {
                        SendMessage(g_hDisplayAdapter, CB_ADDSTRING, 0, (LPARAM)"Primary Display Adapter");
                    }
                    else
                    {
                        SendMessage(g_hDisplayAdapter, CB_ADDSTRING, 0, (LPARAM)adapterIdentifier.Description);
                    }
                }
            }

            /*! activate configured display adapter */
            SendMessage(g_hDisplayAdapter, CB_SETCURSEL, g_XBVideo.GetDisplayAdapter(), 0);

            /*! refresh UI based on currently selected display adapter */
            RefreshDisplayAdapter();

            /*! check appropriate options */
            {
                SendMessage(GetDlgItem(hWndDlg, IDC_CV_FULLSCREEN), BM_SETCHECK, (WPARAM)g_XBVideo.GetFullscreen(), 0);

                SendMessage(GetDlgItem(hWndDlg, IDC_CV_VSYNC), BM_SETCHECK, (WPARAM)g_XBVideo.GetVSync(), 0);
            }
        }
        break;

        case WM_CLOSE:
        {
            /*! if changes have been made, check if the user wants to save them */
            if(g_bHasChanges)
            {
                int ret = MessageBox(hWndDlg, "Do you wish to apply your changes?", "Cxbx", MB_ICONQUESTION | MB_YESNOCANCEL);

                switch(ret)
                {
                    case IDYES:
                        PostMessage(hWndDlg, WM_COMMAND, IDC_VC_ACCEPT, 0);
                        break;
					case IDNO:
						PostMessage(hWndDlg, WM_COMMAND, IDC_VC_CANCEL, 0);
                        break;
                }
                break;
            }

            PostMessage(hWndDlg, WM_COMMAND, IDC_VC_CANCEL, 0);
        }
        break;

        case WM_COMMAND:
        {
            HWND hWndButton = GetDlgItem(hWndDlg, LOWORD(wParam));

            switch(LOWORD(wParam))
            { 
                case IDC_VC_CANCEL:
                    EndDialog(hWndDlg, wParam); 
                    break;
                
                case IDC_VC_ACCEPT:
                {
                    /*! save video resolution configuration */
                    {
                        HWND hVideoResolution = GetDlgItem(hWndDlg, IDC_VC_VIDEO_RESOLUTION);

                        LRESULT lRet = SendMessage(hVideoResolution, CB_GETCURSEL, 0, 0);

                        char szBuffer[128];

                        lRet = SendMessage(hVideoResolution, CB_GETLBTEXT, (WPARAM)lRet, (LPARAM)szBuffer);

                        g_XBVideo.SetVideoResolution(szBuffer);
                    }

                    /*! save fullscreen/vsync options */
                    {
                        LRESULT lRet = SendMessage(GetDlgItem(hWndDlg, IDC_CV_FULLSCREEN), BM_GETCHECK, 0, 0);

                        g_XBVideo.SetFullscreen(lRet == BST_CHECKED);

                        lRet = SendMessage(GetDlgItem(hWndDlg, IDC_CV_VSYNC), BM_GETCHECK, 0, 0);

                        g_XBVideo.SetVSync(lRet == BST_CHECKED);
                    }

                    /*! save video configuration */
                    g_EmuShared->SetXBVideo(&g_XBVideo);

                    EndDialog(hWndDlg, wParam);
                }
                break;

                case IDC_VC_DISPLAY_ADAPTER:
                {
                    if(HIWORD(wParam) == CBN_SELCHANGE)
                    {
                        RefreshDisplayAdapter();
                        break;
                    }
                }
                break;

                case IDC_VC_D3D_DEVICE:
                {
                    if(HIWORD(wParam) == CBN_SELCHANGE)
                    {
                        RefreshDirect3DDevice();
                        break;
                    }
                }
                break;
            }
        }
        break;
    } 
    return FALSE; 
}