鱼C论坛

 找回密码
 立即注册
查看: 2111|回复: 0

windows编程 TYPER 问题,请高手帮忙指点

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

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

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

x
# include <windows.h>

# define BUFFER (x, y) * (pBuffer + y * cxBuffer + x)

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

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                        PSTR szCmdLine, int iCmdShow)
{
        static TCHAR szAppName[] = TEXT ("Typer");
        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 ("This program requires Windows NT!"),
                        szAppName, MB_ICONERROR);
                return 0;
        }
       
        hwnd = CreateWindow (szAppName, TEXT ("Typing Program"), 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 message, WPARAM wParam, LPARAM lParam)
{
        static DWORD dwCharSet = DEFAULT_CHARSET;
        static int  cxChar, cyChar, cxClient, cyClient,
                cxBuffer, cyBuffer, xCaret, yCaret;
        static TCHAR * pBuffer = NULL;
        HDC      hdc;
        int      x, y, i;
        PAINTSTRUCT  ps;
        TEXTMETRIC   tm;
       
        switch (message)
        {
        case WM_INPUTLANGCHANGE:
                dwCharSet = wParam;
               
        case WM_CREATE:
                hdc = GetDC (hwnd);
                SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,
                        dwCharSet, 0, 0, 0, FIXED_PITCH, NULL));
               
                GetTextMetrics (hdc, &tm);
                cxChar = tm.tmAveCharWidth;
                cyChar = tm.tmHeight;
               
                DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT)));
                ReleaseDC (hwnd, hdc);
               
        case WM_SIZE:
                if (message == WM_SIZE)
                {
                        cxClient = LOWORD (lParam);
                        cyClient = HIWORD (lParam);
                }
               
                cxBuffer = max (1, cxClient / cxChar);
                cyBuffer = max (1, cyClient / cyChar);
               
                if (pBuffer != NULL)
                        free (pBuffer);
               
                pBuffer = (TCHAR *) malloc (cxBuffer * cyBuffer * sizeof (TCHAR));
               
                for (y=0; y < cyBuffer; x++)
                        for (x=0; x <cxBuffer; x++)
                                BUFFER (x, y) = ' ';
                        xCaret = 0;
                        yCaret = 0;
                       
                        if (hwnd == GetFocus ())
                                SetCaretPos (xCaret * cxChar, yCaret * cyChar);
                       
                        InvalidateRect (hwnd, NULL,TRUE);
                       
        case WM_SETFOCUS:
                CreateCaret (hwnd, NULL, cxChar, cyChar);
                SetCaretPos (xCaret * cxChar, yCaret * cyChar);
                ShowCaret (hwnd);
                return 0;
               
        case WM_KILLFOCUS:
                HideCaret (hwnd);
                DestroyCaret ();
                return 0;
               
        case WM_KEYDOWN:
                switch (wParam)
                {
                case VK_HOME:
                        xCaret = 0;
                        break;
                       
                case VK_END:
                        xCaret = cxBuffer - 1;
                        break;
                       
                case VK_PRIOR:
                        yCaret = 0;
                        break;
                       
                case VK_NEXT:
                        yCaret = cyBuffer - 1;
                        break;
                       
                case VK_LEFT:
                        xCaret = max (xCaret - 1, 0);
                        break;
                       
                case VK_RIGHT:
                        xCaret = min (xCaret + 1, cxBuffer - 1);
                        break;
                       
                case VK_UP:
                        yCaret = max (yCaret - 1, 0);
                        break;
                       
                case VK_DOWN:
                        yCaret = min (yCaret + 1, cyBuffer - 1);
                        break;
                       
                case VK_DELETE:
                        for (x = xCaret; x < cxBuffer - 1; x++)
                                BUFFER (x, yCaret) = BUFFER (x + 1, yCaret);
                       
                        BUFFER (cxBuffer - 1, yCaret) = ' ';
                       
                        HideCaret (hwnd);
                       
                        hdc = GetDC (hwnd);
                       
                        SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,
                                dwCharSet, 0, 0, 0, FIXED_PITCH, NULL));
                       
                        TextOut (hdc, xCaret, yCaret * cyChar, & BUFFER (xCaret, yCaret), cxBuffer - xCaret);
                       
                        DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT)));
                        ReleaseDC (hwnd, hdc);
                        ShowCaret (hwnd);
                        break;
                }
               
               
                case WM_CHAR:
                        for (i=0; i < (int) LOWORD (lParam); i++)
                        {
                                switch (wParam)
                                {
                                case '\b':
                                        if (xCaret > 0)
                                        {
                                                xCaret --;
                                                SendMessage (hwnd, WM_KEYDOWN, VK_DELETE, i);
                                        }
                                        break;
                                       
                                case '\t':
                                        do
                                        {
                                                SendMessage (hwnd, WM_CHAR, ' ', i);
                                        }
                                        while (xCaret % 8 != 0);
                                        break;
                                       
                                case '\n':
                                        if (++yCaret == cyBuffer)
                                                yCaret = 0;
                                        break;
                                       
                                case '\r':
                                        xCaret = 0;
                                       
                                        if (++yCaret == cyBuffer)
                                                yCaret = 0;
                                        break;
                                       
                                case '\x1B':
                                        for (y=0; y < cyBuffer; y++)
                                                for (x=0; x < cxBuffer; x++)
                                                        BUFFER (x, y) = ' ';
                                               
                                               
                                                xCaret = 0;
                                                yCaret = 0;
                                               
                                                InvalidateRect (hwnd, NULL, FALSE);
                                                break;
                                               
                                default:
                                        BUFFER (xCaret, yCaret) = (TCHAR) wParam;
                                       
                                        HideCaret (hwnd);
                                        hdc = GetDC (hwnd);
                                       
                                        SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,
                                                dwCharSet, 0, 0, 0, FIXED_PITCH, NULL));
                                       
                                        TextOut (hdc, xCaret * cxChar, yCaret * cyChar,
                                                & BUFFER (xCaret, yCaret), 1);
                                       
                                        DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT)));
                                        ReleaseDC (hwnd, hdc);
                                        ShowCaret (hwnd);
                                       
                                        if (++xCaret == cxBuffer)
                                        {
                                                xCaret = 0;
                                                if (++yCaret == cyBuffer)
                                                        yCaret = 0;
                                        }
                                        break;
                                }
                               
                        }
                       
                        SetCaretPos (xCaret * cxChar, yCaret * cyChar);
                        return 0;
                       
                case WM_PAINT:
                        hdc = BeginPaint (hwnd, &ps);
                       
                        SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,
                                dwCharSet, 0, 0, 0, FIXED_PITCH, NULL));
                       
                        for (y=0; y < cyBuffer; y++)
                                TextOut (hdc, 0, y * cyChar, & BUFFER (0, y), cxBuffer);
                       
                        DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT)));
                        EndPaint (hwnd, &ps);
                        return 0;
                       
                case WM_DESTROY:
                        PostQuitMessage (0);
                        return 0;
                       
                       
        }
        return DefWindowProc (hwnd, message, wParam, lParam);
               
}

--------------------Configuration: TYPER - Win32 Debug--------------------
Compiling...
TYPER.CPP
D:\Program Files\Microsoft Visual Studio\MyProjects\TYPER\TYPER.CPP(93) : error C2064: term does not evaluate to a function
D:\Program Files\Microsoft Visual Studio\MyProjects\TYPER\TYPER.CPP(150) : error C2064: term does not evaluate to a function
D:\Program Files\Microsoft Visual Studio\MyProjects\TYPER\TYPER.CPP(150) : error C2064: term does not evaluate to a function
D:\Program Files\Microsoft Visual Studio\MyProjects\TYPER\TYPER.CPP(152) : error C2064: term does not evaluate to a function
D:\Program Files\Microsoft Visual Studio\MyProjects\TYPER\TYPER.CPP(161) : error C2064: term does not evaluate to a function
D:\Program Files\Microsoft Visual Studio\MyProjects\TYPER\TYPER.CPP(206) : error C2064: term does not evaluate to a function
D:\Program Files\Microsoft Visual Studio\MyProjects\TYPER\TYPER.CPP(216) : error C2064: term does not evaluate to a function
D:\Program Files\Microsoft Visual Studio\MyProjects\TYPER\TYPER.CPP(225) : error C2064: term does not evaluate to a function
D:\Program Files\Microsoft Visual Studio\MyProjects\TYPER\TYPER.CPP(252) : error C2064: term does not evaluate to a function
执行 cl.exe 时出错.

TYPER.OBJ - 1 error(s), 0 warning(s)

大家好,新手自己看不懂这个错误提示的意思。请高手帮忙指点一下,非常感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 21:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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