我是OpenGL新手,在使用ChoosePixelFormat函数时,为何返回值总是0?(100分)

  • 主题发起人 主题发起人 delphi-abc
  • 开始时间 开始时间
D

delphi-abc

Unregistered / Unconfirmed
GUEST, unregistred user!
问题见标题。
我的代码如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
dc:=getdc(handle);
setuppixelformat(dc);
end;

procedure TForm1.SetupPixelFormat(dc:HDC);
Const
Pfd : PIXELFORMATDESCRIPTOR = (
nSize : SizeOf (PIXELFORMATDESCRIPTOR);
nVersion : 1;
dwFlags : PFD_DRAW_TO_WINDOW Or PFD_SUPPORT_OPENGL Or PFD_DOUBLEBUFFER;
iPixelType : PFD_TYPE_RGBA;
cColorBits : 32;
cRedBits : 0;
cRedShift : 0;
cGreenBits : 0;
cBlueBits : 0;
cBlueShift : 0;
cAlphaBits : 0;
cAlphaShift : 0;
cAccumBits : 0;
cAccumRedBits : 0;
cAccumGreenBits : 0;
cAccumBlueBits : 0;
cAccumAlphaBits : 0;
cDepthBits : 32;
cStencilBits : 0;
cAuxBuffers : 0;
iLayerType : PFD_MAIN_PLANE;
bReserved : 0;
dwLayerMask : 0;
dwVisibleMask : 0;
dwDamageMask : 0);
Var
PixelFormat : Integer;
begin
PixelFormat:=ChoosePixelFormat(dc,@pfd); //此处PixelFormat的值始终为0
if SetPixelFormat(dc,PixelFormat,@pfd)=false then
begin
messagebox(0,'Set PixelFormat failed!','Error',MB_OK);
exit;
end;
end;

 
GetLastError 看一下错误码
 
可能是:
dc:=getdc(handle);--->>dc:=GetWindowDC(ClientHandle);
 
错误码为126,这说明什么问题?
 
dwLayerMask:PFD_MAIN_PLANE;

not iLayerType
 
惭愧, 上面的看错了.因为我以前就是那样写的.
幸好的PFD_MAIN_PLANE值是0,没有出现问题.

下面的就可以了.
procedure TForm1.FormCreate(Sender: TObject);
begin
LoadLibrary('Opengl32.dll');
dc:=getdc(handle);
setuppixelformat(dc);
end;
原因是你的程序里没有使用GL的函数,dll未加载.
如果使用了的话,就不用加LoadLibrary了.
 
o*o!
顺便问一声,我的代码在WIN2000中运行正常(未修改),然后再在W98中修改,运行
却正常了,这是为何?
 
接受答案了.
 
后退
顶部