Partager via


PFND3DDDI_CREATEOVERLAYCB fonction de rappel (d3dumddi.h)

La fonction pfnCreateOverlayCb crée un objet de superposition en mode noyau et appelle le pilote de miniport d’affichage pour afficher la superposition.

Syntaxe

PFND3DDDI_CREATEOVERLAYCB Pfnd3dddiCreateoverlaycb;

HRESULT Pfnd3dddiCreateoverlaycb(
  HANDLE hDevice,
  D3DDDICB_CREATEOVERLAY *unnamedParam2
)
{...}

Paramètres

hDevice

Handle pour le périphérique d’affichage (contexte graphique).

unnamedParam2

pData [in, out]

Pointeur vers une structure D3DDDICB_CREATEOVERLAY qui décrit la superposition à créer.

Valeur retournée

pfnCreateOverlayCb retourne l’une des valeurs suivantes :

Code de retour Description
S_OK L’objet de superposition a été créé avec succès.
D3DDDIERR_NOTAVAILABLE pfnCreateOverlayCb a échoué en raison d’un manque de matériel de superposition ou de bande passante.
E_INVALIDARG Les paramètres ont été validés et déterminés comme incorrects.
E_OUTOFMEMORY pfnCreateOverlayCb n’a pas pu allouer la mémoire nécessaire pour qu’elle se termine.

Cette fonction peut également retourner d’autres valeurs HRESULT.

Remarques

La fonction pfnCreateOverlayCb retourne un handle à l’objet de superposition en mode noyau nouvellement créé dans le membre hKernelOverlay de la structure D3DDDICB_CREATEOVERLAY pointée par pData. Le pilote d’affichage en mode utilisateur transmet ce handle dans les appels aux fonctions suivantes :

L’exemple de code suivant montre comment créer un objet de superposition.
D3DKMT_HANDLE g_hOverlay = NULL;

HRESULT CD3DContext::CreateOverlay(D3DDDIARG_CREATEOVERLAY* pCreateOverlay) {
    D3DDDICB_CREATEOVERLAY CreateCB;
    DWORD_PTR dwResource = (DWORD_PTR) pCreateOverlay->OverlayInfo.hResource;
    dwResource += pCreateOverlay->OverlayInfo.SubResourceIndex;
    LONG dwTempPitch;

    pCreateOverlay->hOverlay = (HANDLE) 0x27;

    CreateCB.VidPnSourceId = 0;
    CreateCB.OverlayInfo.hAllocation = R200GetAllocationHandle(m_pR200Ctx,
                                     (DWORD)dwResource,
                                      &dwTempPitch);

    CreateCB.OverlayInfo.DstRect.left = pCreateOverlay->OverlayInfo.DstRect.left;
    CreateCB.OverlayInfo.DstRect.right = pCreateOverlay->OverlayInfo.DstRect.right;
    CreateCB.OverlayInfo.DstRect.top = pCreateOverlay->OverlayInfo.DstRect.top;
    CreateCB.OverlayInfo.DstRect.bottom = pCreateOverlay->OverlayInfo.DstRect.bottom;

    CreateCB.OverlayInfo.SrcRect.left = pCreateOverlay->OverlayInfo.SrcRect.left;
    CreateCB.OverlayInfo.SrcRect.right = pCreateOverlay->OverlayInfo.SrcRect.right;
    CreateCB.OverlayInfo.SrcRect.top = pCreateOverlay->OverlayInfo.SrcRect.top;
    CreateCB.OverlayInfo.SrcRect.bottom = pCreateOverlay->OverlayInfo.SrcRect.bottom;

    CreateCB.OverlayInfo.pPrivateDriverData = "This is a test";
    CreateCB.OverlayInfo.PrivateDriverDataSize = 10;

    HRESULT hr = m_d3dCallbacks.pfnCreateOverlayCb(m_hD3D, &CreateCB);

    if (SUCCEEDED(hr)) {
        g_hOverlay = CreateCB.hKernelOverlay;
    }

    return hr;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Desktop (Expérience utilisateur)
En-tête d3dumddi.h (inclure D3dumddi.h)

Voir aussi

D3DDDICB_CREATEOVERLAY

D3DDDI_DEVICECALLBACKS

pfnDestroyOverlayCb

pfnFlipOverlayCb

pfnUpdateOverlayCb