正文

随机画Bezier曲线的程序2005-06-19 19:45:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/caoxin/1938.html

分享到:

工程目录是:Win32App vc6.0 #include<windows.h> #include<stdlib.h> #include<time.h> #define NUM 10 LRESULT CALLBACK Winproc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstanc,LPSTR lpCmdLine,int nShowCmd) {     MSG msg;     static TCHAR szClassName[] = TEXT("::Bezier样条计算公式由法国雷诺汽车公司的工程师Pierm Bezier于六十年代提出");     HWND hwnd;     WNDCLASS wc;     wc.cbClsExtra =0;     wc.cbWndExtra =0;     wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);     wc.hCursor = LoadCursor(NULL,IDC_ARROW);     wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);     wc.hInstance = hInstance;     wc.lpfnWndProc = Winproc;     wc.lpszClassName = szClassName;     wc.lpszMenuName = NULL;     wc.style = CS_HREDRAW|CS_VREDRAW;     if(!RegisterClass(&wc))     {         MessageBox(NULL,TEXT("注册失败"),TEXT("警告框"),MB_ICONERROR);         return 0;     }     hwnd = CreateWindow(szClassName,szClassName,                         WS_OVERLAPPEDWINDOW,                         CW_USEDEFAULT,CW_USEDEFAULT,                         CW_USEDEFAULT,CW_USEDEFAULT,                         NULL,NULL,hInstance,NULL);     ShowWindow(hwnd,SW_SHOWMAXIMIZED);     UpdateWindow(hwnd);     while(GetMessage(&msg,NULL,0,0))     {         TranslateMessage(&msg);         DispatchMessage(&msg);     }     return msg.wParam; } LRESULT CALLBACK Winproc(HWND hwnd,UINT message, WPARAM wparam,LPARAM lparam) {   PAINTSTRUCT ps;   HDC hdc;   static POINT pt[NUM];   TEXTMETRIC tm;   static int cxClient,cyClient;   HPEN hpen;   int i,j,k,n,t;   switch(message)   {   case WM_CREATE:       static int cxchar;       hdc = GetDC(hwnd);       GetTextMetrics(hdc,&tm);       cxchar = tm.tmAveCharWidth;       ReleaseDC(hwnd,hdc);   case WM_SIZE:              cxClient = LOWORD(lparam);       cyClient = HIWORD(lparam);       return 0;   case WM_PAINT:        hdc = GetDC(hwnd);        srand(time(0));        Rectangle(hdc,0,0,cxClient,cyClient);       for(i=0; i<500; i++)           {             SelectObject(hdc,GetStockObject(WHITE_PEN));             PolyBezier(hdc,pt,NUM);             for(j=0; j<NUM; j++)             {                 pt[j].x = rand()%cxClient;                 pt[j].y = rand()%cyClient;             }             hpen = CreatePen(PS_INSIDEFRAME,3,RGB(rand()%256,rand()%256,rand()%256));                          DeleteObject(SelectObject(hdc,hpen));             PolyBezier(hdc,pt,NUM);             for(k=0; k<50000000;k++);           }       for(i=0; i<100;i++)       {         Ellipse(hdc,rand()%cxClient,rand()%cyClient,rand()%cxClient,rand()%cyClient);         Pie(hdc,j=rand()%cxClient,k=rand()%cyClient,n=rand()%cxClient,t=rand()%cyClient,rand()%cxClient,rand()%cyClient,rand()%cxClient,rand()%cyClient) ;       }        if((n=(n+j)/2)>cxchar*20) n=cxchar*20;           SetTextColor(hdc,RGB(rand()%256,rand()%256,rand()%256));         TextOut(hdc,n/2,(t+k)/2,TEXT("瑾以此向Pierm Bezier致敬!"),lstrlen(TEXT("瑾以此向Pierm Bezier致敬!")));         ReleaseDC(hwnd,hdc);           DeleteObject(hpen);           ValidateRect(hwnd,NULL);       return 0;   case WM_DESTROY:       PostQuitMessage(0);       return 0;   }   return DefWindowProc(hwnd,message,wparam,lparam); } 这个程序是有点问题的,因为在画线的当中你不能关闭它,我后又用PeekMessage写了个,解决该问题.

阅读(5118) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册