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_WINDOW、 PFD_DRAW_TO_BITMAP、 PFD_SUPPORT_GDIPFD_SUPPORT_OPENGL 如果设置了以下任何标志, ChoosePixelFormat 将尝试匹配同时设置了该标志或标志的像素格式。 否则,它会尝试匹配未设置该标志的像素格式: PFD_DOUBLEBUFFER PFD_STEREO 如果设置了以下标志,函数将忽略像素格式中的 PFD_DOUBLEBUFFER 标志: PFD_DOUBLEBUFFER_DONTCARE 如果设置了以下标志,函数将忽略像素格式中的 PFD_STEREO 标志: PFD_STEREO_DONTCARE |
iPixelType | 指定函数要考虑的像素格式类型: PFD_TYPE_RGBA、 PFD_TYPE_COLORINDEX |
cColorBits | 零或更大。 |
cRedBits | 未使用。 |
cRedShift | 未使用。 |
cGreenBits | 未使用。 |
cGreenShift | 未使用。 |
cBlueBits | 未使用。 |
cBlueShift | 未使用。 |
cAlphaBits | 零或更大。 |
cAlphaShift | 未使用。 |
cAccumBits | 零或更大。 |
cAccumRedBits | 未使用。 |
cAccumGreenBits | 未使用。 |
cAccumBlueBits | 未使用。 |
cAccumAlphaBits | 未使用。 |
cDepthBits | 零或更大。 |
cStencilBits | 零或更大。 |
cAuxBuffers | 零或更大。 |
iLayerType | 指定以下层类型值之一:PFD_MAIN_PLANE、PFD_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 |