鱼C论坛

 找回密码
 立即注册
查看: 2506|回复: 3

新人问题,贝塞尔样条

[复制链接]
发表于 2013-10-11 05:15:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                        PSTR szCmdLine, int iCmdShow)
{
        static TCHAR szAppName[] = TEXT ("Bezier");
        HWND       hwnd;
        MSG        msg;
        WNDCLASS   wndclass;

    wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
        wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
        wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wndclass.hInstance = hInstance;
        wndclass.lpfnWndProc = WndProc;
        wndclass.lpszClassName = szAppName;
        wndclass.lpszMenuName = NULL;
        wndclass.style = CS_HREDRAW | CS_VREDRAW;

        if (!RegisterClass (&wndclass))
        {
                MessageBox(NULL, TEXT ("Program requires Windows NT!"),
                        szAppName, MB_ICONERROR);
                return 0;
        }

        hwnd = CreateWindow (szAppName, TEXT ("Bezier Splines"), 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;
}

void DramBezier (HDC hdc, POINT apt[])
{
        PolyBezier  (hdc, apt, 4);

        MoveToEx (hdc, apt[0].x, apt[0].y, NULL);
        LineTo (hdc, apt[1].x, apt[1].y);

        MoveToEx (hdc, apt[2].x, apt[2].y, NULL);
        LineTo (hdc, apt[3].x, apt[3].y);
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        static POINT    apt[4];
        HDC             hdc;
        int             cxClient, cyClient;
        PAINTSTRUCT     ps;

        switch (message)
        {
        case WM_SIZE:
                cxClient = LOWORD (lParam);
                cyClient = HIWORD (lParam);

                apt[0].x = cxClient / 4;
                apt[0].y = cyClient / 2;

                apt[1].x = cxClient / 2;
                apt[1].y = cyClient / 4;

                apt[2].x = cxClient / 2;
                apt[2].y = 3 * cyClient / 4;

                apt[3].x = 3 * cxClient / 4;
                apt[3].y = cyClient / 2;
               
                return 0;


        case WM_LBUTTONDOWN:
        case WM_RBUTTONDOWN:
        case WM_MOUSEMOVE:
                if (wParam & MK_LBUTTON || wParam & MK_RBUTTON)
                {
                        hdc = GetDC (hwnd);

                        SelectObject (hdc, GetStockObject (WHITE_PEN));
                        DrawBezier hdc, apt);

                        if (wParam & MK_LBUTTON)
                        {
                                apt[1].x = LOWORD (lParam);
                                apt[1].y = HIWORD (lParam);
                        }

                        if (wParam & MK_RBUTTON)
                        {
                                apt[2].x = LOWORD (lParam);
                                apt[2].y = HIWORD (lParam);
                        }

                        SelectObject (hdc, GetStockObject (BLACK_PEN));
                        DrawBezier (hdc, apt);
                        ReleaseDC (hwnd, hdc);
                }
                return 0;


        case WM_PAINT:
        InvalidateRect (hwnd, NULL, TRUE);
                hdc = BeginPaint (hwnd, &ps);

                DrawBezier (hdc, apt);

                EndPaint (hwnd, &ps);
                return 0;


        case WM_DESTROY:
                PostQuitMessage (0);
                return 0;
        }
        return DefWindowProc (hwnd, message, wParam, lParam);

}
---------------------------------------------------------------------------------------------------
--------------------Configuration: 12112 - Win32 Debug--------------------
Compiling...
12112.cpp
D:\Program Files\Microsoft Visual Studio\MyProjects\12112\12112.cpp(93) : error C2065: 'DrawBezier' : undeclared identifier
执行 cl.exe 时出错.

12112.obj - 1 error(s), 0 warning(s)


以上是新手自己从书上敲的程序,研究了半天还是不知道错误的原因,请高手指点一二,非常感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-11 09:10:11 | 显示全部楼层
你定义的函数名为void DramBezier (HDC hdc, POINT apt[]); // Dram
你调用的函数名为DrawBezier (hdc, apt);                            // Draw
所以出错了 error C2065: 'DrawBezier' : undeclared identifier
修改建议:将函数名统一即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-11 09:15:17 | 显示全部楼层
DrawBezier (hdc, apt); 函数名不匹配,定义的是Dram,调用的是Draw.改过来就好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-12 03:52:18 | 显示全部楼层
原来是这样,谢谢楼上两位高手{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 18:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表