[阅读: 462] 2006-01-04 02:46:54
怀疑是不是根初始化的参数有关?这个初始化参数是抄的
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Draw.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormDraw *FormDraw;
//---------------------------------------------------------------------------
__fastcall TFormDraw::TFormDraw(TComponent* Owner)
: TForm(Owner)
{
Scale = 0.1;
Step = 0.05;
}
//---------------------------------------------------------------------------
void __fastcall TFormDraw::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
//---------------------------------------------------------------------------
void __fastcall TFormDraw::FormPaint(TObject *Sender)
{
hdc = wglGetCurrentDC();
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//glLoadIdentity();
glFlush();
DrawComps();
}
//---------------------------------------------------------------------------
void __fastcall TFormDraw::FormCreate(TObject *Sender)
{
int PixelFormat;
hdc = GetDC(Handle);
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,0,0,0,0,0,0,0,
32,
0,0,
PFD_MAIN_PLANE,
0,0,0,};
PixelFormat=ChoosePixelFormat(hdc,&pfd);
SetPixelFormat(hdc,PixelFormat,&pfd);
hrc=wglCreateContext(hdc);
wglMakeCurrent(hdc,hrc);
w=ClientWidth;
h=ClientHeight;
}
//---------------------------------------------------------------------------
void __fastcall TFormDraw::FormResize(TObject *Sender)
{
glViewport(0, 0, (GLint)ClientWidth, (GLint)ClientHeight);
FormPaint(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TFormDraw::FormDestroy(TObject *Sender)
{
glClearColor(0.0,0.0,0.0,1.0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hrc);
DeleteObject(hdc);
}
//---------------------------------------------------------------------------
void __fastcall TFormDraw::CreateParams(TCreateParams &Params)
{
// 先调用父类中的成员函数,该函数继承自TWindowControl类
TForm::CreateParams(Params);
Params.Style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
}
//---------------------------------------------------------------------------
void __fastcall TFormDraw::BuildComps()
{
}
//---------------------------------------------------------------------------
void __fastcall TFormDraw::DrawComps()
{
TDoublePoint Frame = DM->DrawCompFrame();
long Count = DM->DrawCompDataCount();
AnsiString Name, Shape;
double X, Y;
int Angle;
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
glPushMatrix();
for (int i=0; i<Count; i++)
{
DM->DrawCompData(i, Name, X, Y, Angle, Shape);
if (Shape.UpperCase() == "RECT")
{
glBegin(GL_POLYGON);
glVertex2f((X-0.8)/Frame.x, (Y-0.4)/Frame.y);
glVertex2f((X+0.8)/Frame.x, (Y-0.4)/Frame.y);
glVertex2f((X+0.8)/Frame.x, (Y+0.4)/Frame.y);
glVertex2f((X-0.8)/Frame.x, (Y+0.4)/Frame.y);
glEnd();
}
else
{
glBegin(GL_POINTS);
glVertex2f(X/Frame.x, Y/Frame.y);
glEnd();
}
}
glPopMatrix();
SwapBuffers(hdc);
}
//---------------------------------------------------------------------------
void __fastcall TFormDraw::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
//glLoadIdentity();
switch(Key)
{
case 187:
glScaled(1+Scale,1+Scale,1);
break;
case 189:
glScaled(1-Scale,1-Scale,1);
break;
case VK_LEFT:
glTranslated (0-Step, 0.0, 0.0);
break;
case VK_RIGHT:
glTranslated (Step, 0.0, 0.0);
break;
case VK_UP:
glTranslated (0.0, Step, 0.0);
break;
case VK_DOWN:
glTranslated (0.0, 0-Step, 0.0);
break;
}
DrawComps();
}
//---------------------------------------------------------------------------