⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddcaps.cpp

📁 DDCAPS For WinCE use under X86
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
    BOOL fProcessed = TRUE;

    Which = 7;
    switch (uMsg)
    {
        HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
        HANDLE_MSG(hDlg, WM_COMMAND, Dlg_OnCommand);

        default:
            fProcessed = FALSE;
            break;
    }
    return (fProcessed);
}


//*------------------------------------------------------------------------
//| HELPalCapsDlg_Proc
//*------------------------------------------------------------------------
BOOL CALLBACK
HELPalCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    BOOL fProcessed = TRUE;

    Which = 8;
    switch (uMsg)
    {
        HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
        HANDLE_MSG(hDlg, WM_COMMAND, Dlg_OnCommand);

        default:
            fProcessed = FALSE;
            break;
    }
    return (fProcessed);
}


//*------------------------------------------------------------------------
//| DDEnumCallback
//*------------------------------------------------------------------------
BOOL WINAPI
DDEnumCallbackEx(GUID *pGUID, LPTSTR pDescription, LPTSTR pName, LPVOID pContext, HMONITOR hm)
{
    if (pGUID)
    {
        Drivers[gDriverCnt].GUIDcopy = *pGUID;
        Drivers[gDriverCnt].pGUID = &Drivers[gDriverCnt].GUIDcopy;
    }
    else
        Drivers[gDriverCnt].pGUID = NULL;

    Drivers[gDriverCnt].szDescription[127] = TEXT('\0');
    Drivers[gDriverCnt].szName[127] = TEXT('\0');
    _tcsncpy(Drivers[gDriverCnt].szDescription,pDescription,127);
    _tcsncpy(Drivers[gDriverCnt].szName,pName,127);
    Drivers[gDriverCnt].hm = hm;

    if (gDriverCnt < MAX_DRIVERS)
        gDriverCnt++;
    else
        return DDENUMRET_CANCEL;

    return DDENUMRET_OK;
}

BOOL WINAPI
DDEnumCallback(GUID *pGUID, LPTSTR pDescription, LPTSTR pName, LPVOID context)
{
    return (DDEnumCallbackEx(pGUID, pDescription, pName, context, NULL));
}


//*------------------------------------------------------------------------
//| EnumModesCallback
//*------------------------------------------------------------------------
static int  gCurMode = 0;

DWORD DDAPI
EnumModesCallback(LPDDSURFACEDESC pddsd, LPVOID context)
{
    Modes[ModeCnt].dwWidth = pddsd->dwWidth;
    Modes[ModeCnt].dwHeight = pddsd->dwHeight;
    Modes[ModeCnt].dwBPP = pddsd->ddpfPixelFormat.dwRGBBitCount;
    Modes[ModeCnt].dwRefreshRate = pddsd->dwRefreshRate;

    LBPrintf(TEXT("Mode %2d: %4d x %4d  %2d bpp %d Hz"), ModeCnt, Modes[ModeCnt].dwWidth,
             Modes[ModeCnt].dwHeight, Modes[ModeCnt].dwBPP, Modes[ModeCnt].dwRefreshRate);

    if (ModeCnt < MAX_MODES)
        ModeCnt++;
    else
        return DDENUMRET_CANCEL;

    return DDENUMRET_OK;
}


//*------------------------------------------------------------------------
//| WinMain:
//|     Parameters:
//|         hInstance     - Handle to current Data Segment
//|         hPrevInstance - Always NULL in Win32
//|         lpszCmdLine   - Pointer to command line info
//|         nCmdShow      - Integer value specifying how to start app.,
//|                            (Iconic [7] or Normal [1,5])
//*------------------------------------------------------------------------
int WINAPI
WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPWSTR lpszCmdLine,
        int nCmdShow)
{
    int                     nReturn = 0;
    HRESULT                 ddrval;
    HINSTANCE               hDDrawDLL;
    LPDIRECTDRAWENUMERATEEX pDirectDrawEnumerateEx;

    ghInstance = hInstance;

    // Pop up a dialog letting the user select a driver to use (if more than one)
    gpSelectedDriverGUID = NULL;

    // You need to do a GetModuleHandle and GetProcAddress in order to get the
    // DirectDrawEnumerateEx
    hDDrawDLL = GetModuleHandle(TEXT("DDRAW"));
    if (!hDDrawDLL)
    {
        OutputDebugString(TEXT("LoadLibrary() failed - ddcaps: Can't list display modes"));
        return (-1);
    }
    pDirectDrawEnumerateEx = (LPDIRECTDRAWENUMERATEEX )
        GetProcAddress(hDDrawDLL,TEXT("DirectDrawEnumerateExW"));

    if (pDirectDrawEnumerateEx)
        pDirectDrawEnumerateEx( DDEnumCallbackEx, (LPVOID) NULL,
                                DDENUM_ATTACHEDSECONDARYDEVICES |
                                DDENUM_DETACHEDSECONDARYDEVICES |
                                DDENUM_NONDISPLAYDEVICES);
    else    // Old DirectDraw, so do it the old way
        DirectDrawEnumerate(DDEnumCallback, NULL);

    ddrval = DirectDrawCreate(gpSelectedDriverGUID, &lpDD, NULL);
    if (ddrval != DD_OK)
    {
        OutputDebugString(TEXT("DirectDrawCreate failed"));
        return (-1);
    }

    // Read DirectDraw capabilities
    ReadDDrawCaps();

    if (Init(hInstance, hPrevInstance, lpszCmdLine, nCmdShow))
    {
        nReturn = DoMain(hInstance);
        CleanUp();
    }

    return nReturn;
}


//*------------------------------------------------------------------------
//| ReadDDrawCaps
//*------------------------------------------------------------------------
void ReadDDrawCaps(void)
{
    static DDCAPS ddcapsHEL, ddcapsHAL;

    ddcapsHEL.dwSize = sizeof(ddcapsHEL);
    ddcapsHAL.dwSize = sizeof(ddcapsHAL);

   // lpDD->lpVtbl->GetCaps(lpDD, &ddcapsHAL, &ddcapsHEL);
    lpDD->GetCaps( &ddcapsHAL, &ddcapsHEL);

    gCaps[0].caps = &(ddcapsHAL.dwCaps);
    gCaps[0].defs = ddCapsDefs;

    gCaps[1].caps = &(ddcapsHAL.dwCKeyCaps);
    gCaps[1].defs = CKeyCapsDefs;

    gCaps[2].caps = &(ddcapsHAL.dwFXCaps);
    gCaps[2].defs = FXCapsDefs;

    gCaps[3].caps = &(ddcapsHAL.dwPalCaps);
    gCaps[3].defs = PalCapsDefs;

    gCaps[4].caps = &(ddcapsHAL.ddsCaps.dwCaps);
    gCaps[4].defs = SurfCapsDefs;

    gCaps[5].caps = &(ddcapsHEL.dwCaps);
    gCaps[5].defs = ddCapsDefs;

    gCaps[6].caps = &(ddcapsHEL.dwCKeyCaps);
    gCaps[6].defs = CKeyCapsDefs;

    gCaps[7].caps = &(ddcapsHEL.dwFXCaps);
    gCaps[7].defs = FXCapsDefs;

    gCaps[8].caps = &(ddcapsHEL.dwPalCaps);
    gCaps[8].defs = PalCapsDefs;

    gCaps[9].caps = &(ddcapsHEL.ddsCaps.dwCaps);
    gCaps[9].defs = SurfCapsDefs;
}


//*------------------------------------------------------------------------
//| Init
//|     Initialization for the program is done here:
//|
//*------------------------------------------------------------------------
BOOL
Init(HINSTANCE hInstance, HINSTANCE hPrevInstance,
     LPTSTR lpszCmdLine, int nCmdShow)
{
    WNDCLASS rClass;
    HWND hWnd1;
    HWND hwndLB;
    HWND hwndCmdBar;
    RECT rc = { 0 };

    rClass.style = 0;
    rClass.lpfnWndProc = (WNDPROC) OverlappedWinProc;
    rClass.cbClsExtra = 0;
    rClass.cbWndExtra = 0;
    rClass.hInstance = hInstance;
    rClass.hIcon = LoadIcon(hInstance, TEXT("DDCAPS_ICON"));
    rClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    rClass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
    rClass.lpszMenuName = NULL;
    rClass.lpszClassName = szClassName;

    if (!RegisterClass(&rClass))
    {
        return FALSE;
    }

    hWnd1 = CreateWindowEx(0,
                           szClassName,
                           szAppName,
                           WS_OVERLAPPED | WS_VISIBLE | WS_DLGFRAME | WS_CAPTION,
                           CW_USEDEFAULT,
                           CW_USEDEFAULT,
                           300,
                           200,
                           NULL,
                           NULL,
                           hInstance,
                           NULL);

    if (!hWnd1)
    {
        return FALSE;
    }

    hwndCmdBar = CommandBar_Create(hInstance, hWnd1, 1);
    if (!hwndCmdBar)
    {
        return FALSE;
    }

    CommandBar_InsertMenubar(hwndCmdBar, hInstance, IDR_MENU1, 0);
    CommandBar_AddAdornments(hwndCmdBar, 0, 0);
    CommandBar_DrawMenuBar(hwndCmdBar, 0);

    GetWindowRect(hwndCmdBar, &rc);

    hwndLB = LBCreate(hWnd1, hInstance, rc.bottom-rc.top, FALSE);

    ShowWindow(hWnd1, nCmdShow);
    UpdateWindow(hWnd1);

   // lpDD->lpVtbl->EnumDisplayModes(lpDD, 0, NULL, (LPVOID) hwndLB, EnumModesCallback);
    lpDD->EnumDisplayModes(0, NULL, (LPVOID) hwndLB,(long (__cdecl *)(struct _DDSURFACEDESC *,void *)) EnumModesCallback);

    // highlight the current mode
    SendMessage(hwndLB, LB_SETCURSEL, gCurMode, 0L);

    return (int) hWnd1;
}

//*------------------------------------------------------------------------
//| DoMain:
//|     This is the main loop for the application:
//*------------------------------------------------------------------------
int
DoMain(HINSTANCE hInstance)
{
    MSG msg;

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

//*------------------------------------------------------------------------
//| CleanUp:
//|     Any last-minute application cleanup activities are done here:
//*------------------------------------------------------------------------
void
CleanUp(void)
{
}

//*------------------------------------------------------------------------
//| OverlappedWinProc:
//|
//*------------------------------------------------------------------------
LRESULT WINAPI
OverlappedWinProc(HWND hWnd,
                   UINT wMsgID,
                   UINT wParam,
                   LPARAM lParam)
{
    UINT sel;
    HRESULT ddrval;

    switch (wMsgID)
    {
        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
                case ID_FILE_EXIT:
                    SendMessage(hWnd, WM_CLOSE, 0, 0L);
                    break;

                case IDD_ABOUT:
                    DialogBox(ghInstance, TEXT("About"), hWnd, (DLGPROC)AboutDlgProc);
                    break;

                case ID_VIEW_DRIVERCAPS:
                    CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
                                 NULL, ddCapsDlg_Proc);
                    break;

                case ID_VIEW_DRIVERCOLORKEYCAPS:
                    CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
                                 NULL, CKeyCapsDlg_Proc);
                    break;

                case ID_VIEW_DRIVERFXCAPS:
                    CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
                                 NULL, FXCapsDlg_Proc);
                    break;

                case ID_VIEW_DRIVERPALETTECAPS:
                    CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
                                 NULL, PalCapsDlg_Proc);
                    break;

                case ID_VIEW_DRIVERSURFACECAPS:
                    CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
                                 NULL, SurfCapsDlg_Proc);
                    break;

                case ID_VIEW_HELCAPS:
                    CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
                                 NULL, HELddCapsDlg_Proc);
                    break;

                case ID_VIEW_HELCOLORKEYCAPS:
                    CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
                                 NULL, HELCKeyCapsDlg_Proc);
                    break;

                case ID_VIEW_HELFXCAPS:
                    CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
                                 NULL, HELFXCapsDlg_Proc);
                    break;

                case ID_VIEW_HELPALETTECAPS:
                    CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
                                 NULL, HELPalCapsDlg_Proc);
                    break;

                case ID_VIEW_HELSURFACECAPS:
                    CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
                                 NULL, HELSurfCapsDlg_Proc);
                    break;

                case ID_PRINTF_LISTBOX:
                    if (HIWORD(wParam) == LBN_DBLCLK)
                    {
                        sel = (UINT) SendMessage((HWND) lParam, LB_GETCURSEL, 0,
                                                 0L);
                        if (sel < (UINT)ModeCnt)
                        {
                            //ddrval = lpDD->lpVtbl->SetCooperativeLevel(lpDD,
							ddrval = lpDD->SetCooperativeLevel(hWnd,
                                                        DDSCL_EXCLUSIVE |
                                                        DDSCL_NOWINDOWCHANGES |
                                                        DDSCL_FULLSCREEN);
                            if (ddrval == DD_OK)
                            {
                                //ddrval = lpDD->lpVtbl->SetDisplayMode(lpDD,
								ddrval = lpDD->SetDisplayMode(Modes[sel].dwWidth,
                                                        Modes[sel].dwHeight,
                                                        Modes[sel].dwBPP);
                                //ddrval = lpDD->lpVtbl->SetCooperativeLevel(lpDD,
							    ddrval = lpDD->SetCooperativeLevel(hWnd, DDSCL_NORMAL);
                            }
                        }
                    }
                    else if (HIWORD(wParam) == LBN_SETFOCUS)
                    {
                        SendMessage((HWND) lParam, LB_SETCURSEL, gCurMode, 0L);
                    }
                    break;
            }
            break;

        case WM_PAINT:
            {
                PAINTSTRUCT ps;

                BeginPaint(hWnd, &ps);
                EndPaint(hWnd, &ps);
            }
            break;

        case WM_SIZE:
            LBSize(LOWORD(lParam), HIWORD(lParam));
            break;

        case WM_DESTROY:
            PostQuitMessage(0);
            break;

        default:
            return DefWindowProc(hWnd, wMsgID, wParam, lParam);
    }
    return 0;
}


//================================================================
//  About - process about box
//================================================================
LRESULT CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_INITDIALOG:
            return(TRUE);

        case WM_COMMAND:                      // message: received a command
            if(LOWORD(wParam) == IDOK         // "OK" box selected?
            || LOWORD(wParam) == IDCANCEL) {  // System menu close command?
                EndDialog(hDlg, TRUE);        // Exit the dialog
                return(TRUE);
            }
            break;
    }
    return(FALSE); // Didn't process the message
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -