#include <windows.h> //windows头文件
#include <stdio.h> //C语言头文件
LRESULT CALLBACK WinSunProc( //CALLBACK调用
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain( //winmain程序入口点函数
HINSTANCE hInstance,
HINSTANCE hPrecInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
WNDCLASS wndcls; //wndcls窗口类
wndcls.cbClsExtra=0; //窗口类为0
wndcls.cbWndExtra=0; //窗口类为0
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); //HBRUSH强制转换//GetStockObject窗体底板耶颜色 BLACK_BRUSH颜色
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS); //LoadCursor鼠标IDC_CROSS鼠标显示样式
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); //LoadIcon图标IDI_ERROR图标类型可以更换
wndcls.hInstance=hInstance; //形参 hInstance使用winmain程序入口函数里的 应用程序实例号
wndcls.lpfnWndProc=WinSunProc; //窗口过程函数 WinSunProc回条函数下面有
wndcls.lpszClassName="toulan"; //类名
wndcls.lpszMenuName=NULL; //NULL设置为空没有菜单
wndcls.style=CS_HREDRAW|CS_VREDRAW; //CS_HREDRAW水平重画整个窗口//CS_VREDRAW垂直重画整个窗口
RegisterClass(&wndcls); //RegisterClass注册窗口 //wndcls窗口类
HWND hwnd; //句柄类
hwnd=CreateWindow("toulan","第一个程序", //CreateWindow创建窗口
WS_OVERLAPPEDWINDOW,0,0,600,400,NULL/*副窗口*/,NULL/*菜单*/,hInstance/*当前实例的句柄*/,NULL/*多文档和单文档指针*/); //WS_OVERLAPPEDWINDOW窗口类型
//0,0,600,400 0,0 软件显示位置 600,400长度和宽度
ShowWindow(hwnd,SW_SHOWNORMAL); //SW_SHOWNORMAL显示方式
UpdateWindow(hwnd); //UpdateWindow更新窗口
MSG msg;
while(GetMessage(&msg,NULL,0,0)) //while循环 //GetMessage消息队列中获取消息//0,0 最大值 最小值 0,0 获取全部消息
{
TranslateMessage(&msg); //TranslateMessage转换消息
DispatchMessage(&msg); //DispatchMessage把消息传递给窗口
}
return 0;
}
LRESULT CALLBACK WinSunProc( //回条函数
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg) //switch(uMsg)判断是那句
{
case WM_CHAR: //WM_CHAR按下了某个键
char szChar[20]; //数组保存
sprintf(szChar,"char is %d",wParam); //sprintf往屏幕上输出一个文本 wParam得到的按键信息保存到szChar数组里
MessageBox(hwnd,szChar,"标题",MB_OK); //MessageBox弹出窗口szChar键盘敲击字符的ascii码 "偷懒"标题 MB_OK消息框的类型
break;
case WM_LBUTTONDOWN: //WM_LBUTTONDOWN鼠标左键按下消息
MessageBox(hwnd,"鼠标左键","标题",MB_OK);
HDC hdc; //HDC句柄类型
hdc=GetDC(hwnd); //GetDC获取hdc句柄 hwnd窗口句柄
TextOut(hdc,0,20,"第一个程序2",strlen("第一个程序2")); //TextOut文本输出函数 hdc获取句柄上边已经获取了 0,20, X,Y坐标 "第一个程序2"输出的文本内容 strlen获取字符串长度
ReleaseDC(hwnd,hdc); //ReleaseDC释放DC 一定要释放要不内存泄露
break;
case WM_PAINT: //消息重绘
HDC hDc;
PAINTSTRUCT ps;
hDc=BeginPaint(hwnd,&ps); //BeginPaint获取DC
TextOut(hDc,0,0,"你好中国",strlen("你好中国"));
EndPaint(hwnd,&ps); //EndPaint释放DC
break;
case WM_CLOSE: //当窗口关闭响应这个消息
if(IDYES==MessageBox(hwnd,"是否退出?","标题",MB_YESNO)) //判断IDYES=YES为真
{
DestroyWindow(hwnd); //DestroyWindow销毁这个窗口
}
break;
case WM_DESTROY:
PostQuitMessage(0); //退出程序
break;
default: //消息循环必须要有default
return DefWindowProc(hwnd,uMsg,wParam,lParam); //DefWindowProc缺省处理
}
return 0; //返回值
}