posts - 8,  comments - 4,  trackbacks - 0
朴素——美之所在











//Copyright (c) LeafCore
#include <windows.h>
#include 
<math.h>

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
void draw(HDC, doubledoubledoubledouble);

char szClassName[ ] = "LeafCore";

int WINAPI WinMain(HINSTANCE hThisInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpszArgument,
                   
int nFunsterStil)

{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;

    wincl.hInstance 
= hThisInstance;
    wincl.lpszClassName 
= szClassName;
    wincl.lpfnWndProc 
= WindowProcedure;
    wincl.style 
= CS_DBLCLKS;
    wincl.cbSize 
= sizeof (WNDCLASSEX);

    wincl.hIcon 
= LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm 
= LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor 
= LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName 
= NULL;
    wincl.cbClsExtra 
= 0;
    wincl.cbWndExtra 
= 0;
    wincl.hbrBackground
=(HBRUSH)GetStockObject(WHITE_BRUSH);

    
if (!RegisterClassEx(&wincl))
        
return 0;

    hwnd
=CreateWindowEx(
              
0,
              szClassName,
              
"LeafCore",
              WS_OVERLAPPEDWINDOW,
              CW_USEDEFAULT,
              CW_USEDEFAULT,
              
1024,
              
768,
              HWND_DESKTOP,
              NULL,
              hThisInstance,
              NULL
         );

    ShowWindow(hwnd, nFunsterStil);

    
while(GetMessage(&messages, NULL, 00)) {
        TranslateMessage(
&messages);
        DispatchMessage(
&messages);
    }

    
return messages.wParam;
}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    
switch (message) {
    
case WM_PAINT:
        hdc
=BeginPaint(hwnd, &ps);
        HPEN green_pen
=CreatePen(PS_SOLID, 1, RGB(01270));
        HPEN old_pen
=(HPEN) SelectObject(hdc, green_pen);

        draw(hdc, 
200400600400);

        SelectObject(hdc, old_pen);
        DeleteObject(green_pen);
        EndPaint(hwnd, 
&ps);
        
break;
    
case WM_DESTROY:
        PostQuitMessage (
0);
        
break;
    
default:
        
return DefWindowProc (hwnd, message, wParam, lParam);
    }

    
return 0;
}

void draw(HDC hdc, double start_x, double start_y, double end_x, double end_y)
{
    
//递归出口
    if (fabs(start_x-end_x)<2 && fabs(start_y-end_y)<2) {
        
return;
    }

    
//左三分点
    int left_point_x=(int)((2*start_x+end_x)/3);
    
int left_point_y=(int)((2*start_y+end_y)/3);

    
//中间点
    int middle_point_x=(int)((start_x+end_x)/2-0.2887*(start_y-end_y));
    
int middle_point_y=(int)((start_y+end_y)/2+0.2887*(start_x-end_x));

    
//右三分点
    int right_point_x=(int)((start_x+2*end_x)/3);
    
int right_point_y=(int)((start_y+2*end_y)/3);

    
//画出起点至左三分点
    MoveToEx(hdc, (int)start_x, (int)start_y, 0);
    LineTo(hdc, left_point_x, left_point_y);

    
//休眠30毫秒
    Sleep(30);

    
//画出右三分点至终点
    MoveToEx(hdc, right_point_x, right_point_y, 0);
    LineTo(hdc, (
int)end_x, (int)end_y);

    
//休眠30毫秒
    Sleep(30);

    
//画出左三分点至中间点
    draw(hdc, left_point_x, left_point_y, middle_point_x, middle_point_y);

    
//画出中间点至右三分点
    draw(hdc, middle_point_x, middle_point_y, right_point_x, right_point_y);
}
posted on 2011-06-19 19:07 leafcore 阅读(1770) 评论(1)  编辑 收藏 引用

FeedBack:
# re: 简单的分形
2011-06-25 19:40 | 匿名
有个小小的问题。VS2010给出编译错误:error C2360: “old_pen”的初始化操作由“case”标签跳过  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



常用链接

留言簿

文章分类(2)

交流与思索

让生活更轻松

最新评论

阅读排行榜