supper吧 关注:130贴子:2,196
  • 1回复贴,共1
代码备份


IP属地:北京1楼2019-09-07 22:22回复
    double dfTheta=0,dfRange=100.0;
    long i=0,j=0;
    long lCentreX=0,lCentreY=0,lRadious=(long)(0.2*dfRange);
    POINT lpSin[100];
    for(int j=0;j<100;j++) //生成正弦曲线的点坐标
    {
    lpSin[j].x=(long)(j*2*Pi/100*60);
    lpSin[j].y=(long)(dfRange*sin(j*2*Pi/100));
    }
    HDC hDC; //定义指向设备的句柄
    HBRUSH hBrush; //定义指向画刷的句柄
    HPEN hPen; //定义指向画笔的句柄
    PAINTSTRUCT PtStr;//定义指向包含绘图信息的结构体变量
    switch(iMessage) //处理消息
    {
    case WM_PAINT: //处理绘图消息
    hDC=BeginPaint(hWnd,&PtStr);
    SetWindowOrgEx(hDC,-200,-200,NULL); //设置映像模式
    hPen=CreatePen(PS_DASH,1,RGB(255,0,0)); //黑色画笔
    SelectObject(hDC,hPen); //选择画笔
    Polyline(hDC,lpSin,100);
    if(i<=25) //第一个1/4周期
    {
    hPen=CreatePen(PS_DASH,1,RGB(255,0,0));
    hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0));
    lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径
    }
    else if(i<=50)
    {
    hPen=CreatePen(PS_DASH,1,RGB(0,255,0));
    hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0));
    lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径
    }
    else if(i<=75)
    {
    hPen=CreatePen(PS_DASH,1,RGB(0,0,255));
    hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,0,255));
    lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径
    }
    else
    {
    hPen=CreatePen(PS_DASH,1,RGB(255,255,0));
    hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,255,0));
    lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径
    }
    /*SelectObject(hDC,hBrush);
    SelectObject(hDC,hPen);
    lCentreX=lpSin[i].x;
    lCentreY=lpSin[i].Y;
    Ellipse(hDC,lCentreX-lRadious,lCentreY-lRadious,
    lCentreX-lRadious,lCentreY-lRadious);
    I++;
    DeleteObject(hPen);
    DeleteObject(hBrush);
    EndPaint(hWnd,&PtStr);
    Sleep(100);
    if(i<100) InvalidateRect(hWnd,NUll,1)l
    return 0;
    */
    SelectObject(hDC,hBrush); //选择画刷
    SelectObject(hDC,hPen);
    lCentreX=lpSin[i].x; //圆心x坐标
    lCentreY=lpSin[i].y; //圆心y坐标
    Ellipse(hDC,lCentreX-lRadious,lCentreY-lRadious,
    lCentreX+lRadious,lCentreY+lRadious); //画圆
    i++;
    DeleteObject(hPen); //删除画笔
    DeleteObject(hBrush); //删除画刷
    EndPaint(hWnd,&PtStr); //删除设备环境指针
    Sleep(100); //停0.1秒
    if(i<100) InvalidateRect(hWnd,NULL,1); //刷新用户区
    return 0;
    case WM_DESTROY: //关闭窗口
    PostQuitMessage(0);
    return 0;
    default:
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
    }
    }
    int iFontFlag=0;
    //主函数
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
    {
    MSG Message;
    if (!InitWindowClass(hInstance, nCmdShow))
    {
    MessageBox(NULL, _T("创建窗口失败!"), _T("创建窗口"), NULL);
    return 1;
    }
    while (GetMessage(&Message, 0, 0, 0))//消息循环
    {
    TranslateMessage(&Message);
    DispatchMessage(&Message);
    }
    return (int)Message.wParam;
    }
    //消息处理函数
    long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
    {
    HDC hDC;
    HFONT hF;
    PAINTSTRUCT ps;
    TEXTMETRIC tm;
    char lpsz_1[]="欲穷千里目 更上一层楼";
    char chFont[7];
    int X=0,Y=0;
    int nCharlen=strlen(lpsz_1);
    switch(iMessage)
    {
    case WM_CREATE:
    SetTimer(hWnd,1,200,NULL);
    break;
    case WM_PAINT:
    hDC=BeginPaint(hWnd,&ps);
    if(iFontFlag/nCharlen==0)
    {
    SetTextColor(hDC,RGB(255,0,0));
    strcpy_s(chFont,"宋体");
    }else if(iFontFlag/nCharlen==1)
    {
    SetTextColor(hDC,RGB(255,255,0));
    strcpy_s(chFont,"楷体_");
    }else if(iFontFlag/nCharlen==2)
    {
    SetTextColor(hDC,RGB(0,0,255));
    strcpy_s(chFont,"仿宋体");
    }
    else if(iFontFlag/nCharlen==3)
    {
    SetTextColor(hDC,RGB(0,255,0));
    strcpy_s(chFont,"黑体");
    }else {
    iFontFlag=0;
    SetTextColor(hDC,RGB(255,0,0));
    }
    hF=CreateFont(
    40,
    0,
    0,
    0,
    400,
    0,
    0,
    0,
    GB2312_CHARSET,
    OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS, //默认裁剪精度
    DEFAULT_QUALITY, //默认输出质量
    DEFAULT_PITCH| FF_DONTCARE, //默认间距
    chFont);
    SelectObject(hDC,hF);
    GetTextMetrics(hDC,&tm);
    TextOut(hDC,X,Y,&lpsz_1[iFontFlag%nCharlen],nCharlen-iFontFlag&nCharlen);
    iFontFlag+=2;
    DeleteObject(hF);
    EndPaint(hWnd,&ps);
    return 0;
    case WM_DESTROY:
    PostQuitMessage(0);
    KillTimer(hWnd,1);
    return 0;
    case WM_TIMER:
    InvalidateRect(hWnd,NULL,1);
    break;
    default:
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
    }
    return 0;
    }
    int nNum = 0, nMaxNum = 20;
    long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam) {
    HDC hDC; //定义设备环境句柄.
    HBRUSH hBrush; //定义画刷句柄
    HPEN hPen; //定义画笔句柄
    PAINTSTRUCT PtStr; //定义包含绘图信息的结构体变量
    int nCentreX, nCentreY; //定义3个叶片的圆心的坐标.
    double Angle;
    switch(iMessage) {
    case WM_CREATE:
    SetTimer(hWnd, 9999, 100, NULL);
    return 0;
    case WM_TIMER:
    InvalidateRect(hWnd, NULL, 1); //重绘窗口区域.
    return 0;
    case WM_PAINT: //处理绘图消息.
    hDC = BeginPaint(hWnd, &PtStr); //获得设备环境指针.
    SetViewportOrgEx(hDC, 300, 200, NULL);
    //绘制外圆
    hPen = (HPEN)GetStockObject(BLACK_PEN);
    SelectObject(hDC, hPen);
    Ellipse(hDC, -100, -100, 100, 100);
    //绘制风车的叶片
    hBrush = CreateSolidBrush(RGB(255, 0, 0)); //画红色的叶片.
    SelectObject(hDC, hBrush);
    Angle = 2 * Pi / nMaxNum * nNum;
    nCentreX = (int)(50 * cos(fAngle));
    nCentreY = (int)(50 * sin(fAngle));
    Pie(hDC, nCentreX - 50, nCentreY - 50,
    nCentreX + 50, nCentreY + 50,
    (int)(nCentreX + 50 * cos(fAngle)), (int)(nCentreY + 50 * sin(fAngle)),
    (int)(nCentreX + 50 * cos(fAngle + Pi)), (int)(nCentreY + 50 * sin(fAngle + Pi)));
    hBrush = CreateSolidBrush(RGB(255, 255, 0)); //画天蓝色的叶片.
    SelectObject(hDC, hBrush);
    nCentreX = (int)(50 * cos(fAngle + 2 * Pi / 3));
    nCentreY = (int)(50 * sin(fAngle + 2 * Pi / 3));
    Pie(hDC, nCentreX - 50, nCentreY - 50,
    nCentreX + 50, nCentreY + 50,
    (int)(nCentreX + 50 * cos(fAngle + 2 * Pi / 3)), (int)(nCentreY + 50 * sin(fAngle + 2 * Pi / 3)),
    (int)(nCentreX + 50 * cos(fAngle + Pi + 2 * Pi / 3)), (int)(nCentreY + 50 * sin(fAngle + Pi + 2 * Pi / 3)));
    hBrush = CreateSolidBrush(RGB(0, 255, 255)); //画黄色的叶片.
    SelectObject(hDC, hBrush);
    nCentreX = (int)(50 * cos(fAngle + 4 * Pi / 3));
    nCentreY = (int)(50 * sin(fAngle + 4 * Pi / 3));
    Pie(hDC, nCentreX - 50, nCentreY - 50,
    nCentreX + 50, nCentreY + 50,
    (int)(nCentreX + 50 * cos(fAngle + 4 * Pi / 3)), (int)(nCentreY + 50 * sin(fAngle + 4 * Pi / 3)),
    (int)(nCentreX + 50 * cos(fAngle + Pi + 4 * Pi / 3)), (int)(nCentreY + 50 * sin(fAngle + Pi + 4 * Pi / 3)));
    nNum++; //当前序数加1.
    Sleep(100); //等待0.1秒.
    InvalidateRect(hWnd, NULL, 1); //重绘窗口区域.
    EndPaint(hWnd, &PtStr); //释放环境指针
    return 0;
    case WM_DESTROY:
    PostQuitMessage(0);
    KillTimer(hWnd, 1);
    return 0;
    default:
    return(DefWindowProc(hWnd, iMessage, wParam, lParam));
    }
    }


    IP属地:北京2楼2019-09-07 22:23
    回复