#include"windows.h"
#include"stdlib.h"
#include"string.h"
void  WINAPI CaretPos(int *xCaret,int *yCaret);
long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
HWND hWndMain;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{MSG Message;
if(!InitWindowsClass( hInstance))
return FALSE;
if(!InitWindows( hInstance, nCmdShow))
return FALSE;
while(GetMessage(&Message,NULL,0,0))           
{TranslateMessage(&Message);
DispatchMessage(&Message);}
return Message.wParam;}
long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam)
{
static char cCharBuf[30];
static int nNumChar=0, nArrayChar=0;
int x=0;
static int xCaret=0,yCaret=0;
HDC hDC;
PAINTSTRUCT Pt;switch(iMessage)
{case WM_CHAR:
if(wParam==VK_ESCAPE)
MessageBox(hWnd,"您现在不能按Esc键,请继续其他操作",NULL,MB_OK);
else if(nNumChar==30)
MessageBox(hWnd,"缓冲区已满不能再输入字符了\n若需要删除字符,请用BackSpace键",NULL,MB_OK);
else if(wParam==VK_DELETE)
{if(nNumChar==0)
MessageBox(hWnd,"缓冲区已空,没有字符可供删除",NULL,MB_OK);
else 
cCharBuf[x-1]=cCharBuf[x];
nNumChar--;
CaretPos( &xCaret, &yCaret);
InvalidateRect(hWnd,NULL,1);}
else if(wParam==VK_LEFT)
{if(nArrayChar==0)
MessageBox(hWnd,"您已经移动到起始位置,不能再移动了",NULL,MB_OK);
else
nArrayChar--;
CaretPos(&xCaret,&yCaret);
InvalidateRect(hWnd,NULL,1);
}
else if(wParam==VK_BACK)
{if(nArrayChar==0)
MessageBox(hWnd,"当前位置是文本的起始位置,不能回退",NULL,MB_OK);
else
nArrayChar--;
nNumChar--;
CaretPos(&xCaret,&yCaret);
InvalidateRect(hWnd,NULL,1);}
else
cCharBuf[nArrayChar]=(unsigned char)wParam;
nArrayChar++;
nNumChar++;
CaretPos(&xCaret,&yCaret);
InvalidateRect(hWnd,NULL,1);
break;
case WM_PAINT:
hDC=BeginPaint(hWnd,&Pt);
TextOut(hDC,0,0,cCharBuf,strlen(cCharBuf));
EndPaint(hWnd,&Pt);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,iMessage,wParam,lParam);
break;}
return 0;}BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{HWND hWnd;
hWnd=CreateWindow("MT",                           
  "键盘操作例程",
  WS_OVERLAPPEDWINDOW,
0,
0,
CW_USEDEFAULT,
                    CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

if(!hWnd)
   return FALSE;
hWndMain=hWnd;
ShowWindow( hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;}
BOOL InitWindowsClass(HINSTANCE hInstance)
{WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,"END");
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="MT";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}
                       这是一个Win32程序运行时候会出现Linking...
ok.obj : error LNK2001: unresolved external symbol "void __stdcall CaretPos(int *,int *)" (?CaretPos@@YGXPAH0@Z)
Debug/ko.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.这两个错误,求高手指点