#include<windows.h>
#include"string.h"
#define BufSize 30
//声明WndProc()函数
LRESULT CALLBACK WndProc(
HWND hwnd,UINT message,
WPARAM wParam,
LPARAM lParam);
//编写WinMain()主函数
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASS wndclass; //定义窗口类结构变量
HWND hwnd; //定义窗口句柄
MSG msg; //定义消息结构变量
char lpszClassName[]="自己创建的窗口";
//设计窗口类型
wndclass.style = CS_HREDRAW|CS_VREDRAW; //改变窗口大小则重画
wndclass.lpfnWndProc = WndProc; //窗口函数为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 =lpszClassName;
//注册窗口类型
if(! RegisterClass(&wndclass))
return FALSE;
//创建窗口
hwnd = CreateWindow(lpszClassName,
"window窗口创建",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
//显示并刷新窗口
ShowWindow(hwnd,nCmdShow); //显示窗口
UpdateWindow (hwnd); //更新窗口的客户区
//消息循环
while(GetMessage (&msg,NULL,0,0))
{
TranslateMessage (&msg); //键盘消息转换
DispatchMessage (&msg); //派送消息给窗口函数
}
return msg.wParam; //返回退出值
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
UINT wParam,
LONG lParam)
{
static char buffer[BufSize];
static int nNumChar = 0 ;
static int i = 0 ;
HDC hdc;
PAINTSTRUCT ps;
HCURSOR hCur;
switch (message)
{
case WM_CHAR: // 处理非系统键的消息
if (wParam == VK_BACK) // 按下退格键
{
if (nNumChar == 0 )
{
MessageBox(hWnd, " 没有字符可以删除! " , NULL, MB_OK);
}
else
{
-- nNumChar;
// 此函数刷新用户区,会产生PAINT消息
InvalidateRect(hWnd, NULL, TRUE);
}
break ;
}
if (nNumChar >= BufSize) // 字符超过缓冲区大小
{
MessageBox(hWnd, " 缓冲区已满!删除字符请用退格键 " , NULL, MB_OK);
break ;
}
buffer[nNumChar ++ ] = (unsigned char)wParam;
InvalidateRect(hWnd, NULL, TRUE);
break ;
case WM_PAINT: // 将处理过的字符输出
hdc = BeginPaint(hWnd, & ps);
// 调整坐标使字出现在鼠标上方
TextOut(hdc, 20 , 40 , buffer, nNumChar);
EndPaint(hWnd, & ps);
break ;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0 ;
default :
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return 0 ;
}