首页资讯商务会员钢材特钢不锈炉料铁矿废钢煤焦铁合金有色化工水泥财经指数人才会展钢厂海外研究统计数据手机期货论坛百科搜索导航短信English
登录 注册

按字母顺序浏览 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

热门关键字: 螺纹钢 铁矿石 电炉 炼钢 合金钢 转炉 结构钢
钢铁百科 - 钢之家

CLOVER程式发表评论(0)编辑词条

目录

CLOVER程式-介绍编辑本段回目录

    要用常规的方法画出这个图形,就必须根据椭圆的边线公式计算出每条直线的端点。利用复杂的剪裁区域,可以直接画出这些线条,而让Windows确定其端点。CLOVER如程式5-8所示。

CLOVER程式-说明    程式5-8  CLOVER
CLOVER.C
/*--------------------------------------------------------------------------
        CLOVER.C --        Clover Drawing Program Using Regions
                        (c) Charles Petzold, 1998
----------------------------------------------------------------------*/
#include <windows.h>
#include <math.h>

#define TWO_PI (2.0 * 3.14159)
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                          PSTR szCmdLine, int iCmdShow)
{
        static TCHAR szAppName【】 = TEXT ("Clover") ;
        HWND                hwnd ;
        MSG                 msg ;
        WNDCLASS        wndclass ;
    
        wndclass.style                = CS_HREDRAW | CS_VREDRAW ;
        wndclass.lpfnWndProc= WndProc ;
        wndclass.cbClsExtra        = 0 ;
        wndclass.cbWndExtra        = 0 ;
        wndclass.hInstance        = hInstance ;
        wndclass.hIcon                = LoadIcon (NULL, IDI_APPLICATION) ;
        wndclass.hCursor        = LoadCursor (NULL, IDC_ARROW) ;
        wndclass.hbrBackground        = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
        wndclass.lpszMenuName        = NULL ;
        wndclass.lpszClassName        = szAppName ;
    
        if (!RegisterClass (&wndclass))
        {
                MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                           szAppName, MB_ICONERROR) ;
                return 0 ;
        }
    
        hwnd = CreateWindow (szAppName, TEXT ("Draw a Clover"),
                                WS_OVERLAPPEDWINDOW,
                                CW_USEDEFAULT, CW_USEDEFAULT,
                                CW_USEDEFAULT, CW_USEDEFAULT,
                                NULL, NULL, hInstance, NULL) ;
        ShowWindow (hwnd, iCmdShow) ;
        UpdateWindow (hwnd) ;
    
        while (GetMessage (&msg, NULL, 0, 0))
        {
                TranslateMessage (&msg) ;
                DispatchMessage (&msg) ;
        }
        return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
        static HRGN hRgnClip ;
        static int        cxClient, cyClient ;
        double        fAngle, fRadius ;
        HCURSOR        hCursor ;
        HDC                 hdc ;
        HRGN                 hRgnTemp【6】 ;
        int                i ;
        PAINTSTRUCT ps ;
        switch (iMsg)
        {
        case        WM_SIZE:
                cxClient        = LOWORD (lParam) ;
                cyClient        = HIWORD (lParam) ;
                hCursor        = SetCursor (LoadCursor (NULL, IDC_WAIT)) ;
                ShowCursor (TRUE) ;
         
                if (hRgnClip)
                        DeleteObject (hRgnClip) ;
         
                hRgnTemp【0】        = CreateEllipticRgn (0, cyClient / 3,
                                                cxClient / 2, 2 * cyClient / 3) ;
                hRgnTemp【1】        = CreateEllipticRgn (cxClient / 2, cyClient / 3,
                                                cxClient, 2 * cyClient / 3) ;
                hRgnTemp【2】        = CreateEllipticRgn (cxClient / 3, 0,
                                                2 * cxClient / 3, cyClient / 2) ;
                hRgnTemp【3】        = CreateEllipticRgn (cxClient / 3, cyClient / 2,
2 * cxClient / 3, cyClient) ;
                hRgnTemp【4】        = CreateRectRgn (0, 0, 1, 1) ;
                hRgnTemp【5】        = CreateRectRgn (0, 0, 1, 1) ;
                hRgnClip        = CreateRectRgn (0, 0, 1, 1) ;

                CombineRgn (hRgnTemp【4】, hRgnTemp【0】, hRgnTemp【1】, RGN_OR) ;
                CombineRgn (hRgnTemp【5】, hRgnTemp【2】, hRgnTemp【3】, RGN_OR) ;
                CombineRgn (hRgnClip,    hRgnTemp【4】, hRgnTemp【5】, RGN_XOR) ;
         
                for (i = 0 ; i < 6 ; i++)
                        DeleteObject (hRgnTemp) ;
         
                SetCursor (hCursor) ;
                ShowCursor (FALSE) ;
                return 0 ;
         
        case        WM_PAINT:
                hdc = BeginPaint (hwnd, &ps) ;
         
                SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;
          SelectClipRgn (hdc, hRgnClip) ;
                fRadius = _hypot (cxClient / 2.0, cyClient / 2.0) ;
                for (fAngle = 0.0 ; fAngle < TWO_PI ; fAngle += TWO_PI / 360)
                {
                        MoveToEx (hdc, 0, 0, NULL) ;
                        LineTo (hdc,        (int) ( fRadius * cos (fAngle) + 0.5),
                                (int) (-fRadius * sin (fAngle) + 0.5)) ;
                }
                EndPaint (hwnd, &ps) ;
                return 0 ;
        case WM_DESTROY:
                DeleteObject (hRgnClip) ;
                PostQuitMessage (0) ;
                return 0 ;
        }
        return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}

→如果您认为本词条还有待完善,请 编辑词条

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
0

标签: CLOVER程式

收藏到: Favorites  

同义词: 暂无同义词

关于本词条的评论 (共0条)发表评论>>

您希望联系哪位客服?(单击选择)