choosePixelFormat 函数 (wingdi.h)

ChoosePixelFormat 函数尝试将设备上下文支持的相应像素格式与给定像素格式规范相匹配。

语法

int ChoosePixelFormat(
  HDC                         hdc,
  const PIXELFORMATDESCRIPTOR *ppfd
);

参数

hdc

指定函数检查的设备上下文,以确定 ppfd 指向的像素格式描述符的最佳匹配。

ppfd

指向 PIXELFORMATDESCRIPTOR 结构的指针,该结构指定请求的像素格式。 在此上下文中,ppfd 指向的 PIXELFORMATDESCRIPTOR 结构的成员按如下所示使用:

nSize 指定 PIXELFORMATDESCRIPTOR 数据结构的大小。 将此成员设置为 sizeof(PIXELFORMATDESCRIPTOR)
nVersion 指定 PIXELFORMATDESCRIPTOR 数据结构的版本号。 将此成员设置为 1。
dwFlags 一组位标志,用于指定像素缓冲区的属性。 可以使用按位 OR 组合以下位标志常量。 如果设置了以下任何标志, 则 ChoosePixelFormat 函数将尝试匹配同时设置了该标志或标志的像素格式。 否则, ChoosePixelFormat 将忽略像素格式中的标志: PFD_DRAW_TO_WINDOWPFD_DRAW_TO_BITMAPPFD_SUPPORT_GDIPFD_SUPPORT_OPENGL 如果设置了以下任何标志, ChoosePixelFormat 将尝试匹配同时设置了该标志或标志的像素格式。 否则,它会尝试匹配未设置该标志的像素格式: PFD_DOUBLEBUFFER PFD_STEREO 如果设置了以下标志,函数将忽略像素格式中的 PFD_DOUBLEBUFFER 标志: PFD_DOUBLEBUFFER_DONTCARE 如果设置了以下标志,函数将忽略像素格式中的 PFD_STEREO 标志: PFD_STEREO_DONTCARE
iPixelType 指定函数要考虑的像素格式类型: PFD_TYPE_RGBAPFD_TYPE_COLORINDEX
cColorBits 零或更大。
cRedBits 未使用。
cRedShift 未使用。
cGreenBits 未使用。
cGreenShift 未使用。
cBlueBits 未使用。
cBlueShift 未使用。
cAlphaBits 零或更大。
cAlphaShift 未使用。
cAccumBits 零或更大。
cAccumRedBits 未使用。
cAccumGreenBits 未使用。
cAccumBlueBits 未使用。
cAccumAlphaBits 未使用。
cDepthBits 零或更大。
cStencilBits 零或更大。
cAuxBuffers 零或更大。
iLayerType 指定以下层类型值之一:PFD_MAIN_PLANEPFD_OVERLAY_PLANE、PFD_UNDERLAY_PLANE
bReserved 未使用。
dwLayerMask 未使用。
dwVisibleMask 未使用。
dwDamageMask 未使用。
 

返回值

如果函数成功,则返回值为像素格式索引 (从 1 开始的) 与给定像素格式描述符最匹配。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

必须确保 ChoosePixelFormat 函数匹配的像素格式满足你的要求。 例如,如果请求具有 24 位 RGB 颜色缓冲区的像素格式,但设备上下文仅提供 8 位 RGB 颜色缓冲区,则 函数将返回具有 8 位 RGB 颜色缓冲区的像素格式。

示例

下面的代码示例演示如何使用 ChoosePixelFormat 来匹配指定的像素格式。

PIXELFORMATDESCRIPTOR pfd = { 
    sizeof(PIXELFORMATDESCRIPTOR),  //  size of this pfd  
    1,                     // version number  
    PFD_DRAW_TO_WINDOW |   // support window  
    PFD_SUPPORT_OPENGL |   // support OpenGL  
    PFD_DOUBLEBUFFER,      // double buffered  
    PFD_TYPE_RGBA,         // RGBA type  
    24,                    // 24-bit color depth  
    0, 0, 0, 0, 0, 0,      // color bits ignored  
    0,                     // no alpha buffer  
    0,                     // shift bit ignored  
    0,                     // no accumulation buffer  
    0, 0, 0, 0,            // accum bits ignored  
    32,                    // 32-bit z-buffer      
    0,                     // no stencil buffer  
    0,                     // no auxiliary buffer  
    PFD_MAIN_PLANE,        // main layer  
    0,                     // reserved  
    0, 0, 0                // layer masks ignored  
    }; 
    HDC  hdc;
    int  iPixelFormat; 
 
iPixelFormat = ChoosePixelFormat(hdc, &pfd);

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 wingdi.h
Library Gdi32.lib
DLL Gdi32.dll

另请参阅

DescribePixelFormat

GetPixelFormat

Windows 上的 OpenGL

SetPixelFormat

Windows 函数