#include <windows.h>//windows头文件
#include <stdio.h>//C语言头文件
LRESULT CALLBACK WinSunProc( //消息机制
HWND hwnd, // handle to window窗口的句柄
UINT uMsg, // message identifier 消息定义为整形,消息的内容
WPARAM wParam, // first message parameter消息的附加信息附加参数
LPARAM lParam // second message parameter
//DWORD TIME 消息发生投递的时间
//pt 消息发生时候光标的位置
);
int WINAPI WinMain( //winmain函数入口函数
HINSTANCE hInstance, // handle to current instance当前实例的句柄
HINSTANCE hPrevInstance, // handle to previous instance前一个实例的句柄就是他的兄弟实例,一般是空
LPSTR lpCmdLine, // command line LP长 指针,STR字符串 命令行参数
int nCmdShow // show state 显示状态
)
//窗口4部分:
//1设计一个窗口类
//2注册窗口类
//3创建窗口
//4显示更新窗口
{
//1设计部分
WNDCLASS wndcls; //定义一个窗口类的变量
wndcls.cbClsExtra=0;//指定分配给窗口类结构之后的额外字节数*
wndcls.cbWndExtra=0;///指定分配给窗口实例之后的额外字节数
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);//画刷,就是屏幕背景BLACK_BRUSH,WHITE_BRUSH,(HBRUSH)是由于数据类型不符,进行的强制转换。
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);//NULL表示选择微软标准的光标。后面的IDC_CROSS,IDC_NO,IDC_SIZE表示选用的种类,具体样式参考MSDN
wndcls.hIcon=LoadIcon(NULL,IDI_APPLICATION);//图标IDI_ERROR,ID_HAND,ID_APPLICATION,前面的NULL表示选择的微软的标准的图表。
wndcls.hInstance=hInstance;//把变量窗口句柄负直
wndcls.lpfnWndProc=WinSunProc;//消息的回凋
wndcls.lpszClassName="Weixin2003";//设置窗口名称
wndcls.lpszMenuName=NULL;//设置菜单的名称
wndcls.style=CS_HREDRAW | CS_VREDRAW; //cs 窗口类 hredeaw 水平情况,vredeaw垂直情况
//当水平垂直发生变化的时候窗口重化 |表示二进制或(OR)
//2注册部分 把消息传诵到基制指针当中然后保存到内存当中
RegisterClass(&wndcls);
//注册窗口类,取前面定义的窗口类的地址
//3创建部分
HWND hwnd;//定义 一个句炳
hwnd=CreateWindow("Weixin2003","窗口名称",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL);
//建立窗口,(引用注册的设计窗口,窗口名称,窗口类型,起事位置就是左上角水平坐标,垂直坐标,宽度,高度,副窗口句炳,菜单句炳,当前实例句炳,单稳当多文档的附加参数)
//4显示更新窗口
ShowWindow(hwnd,SW_SHOWNORMAL);//显示窗口(句炳,显示方式)
UpdateWindow(hwnd);
//重新刷一下窗口。至于为什么以后讲解。
//消息循环,
MSG msg;//MSG结构体定义一个MSG的消息变量
while(GetMessage(&msg,NULL,0,0))
//while循环,GetMessage在消息队列中取出消息(消息结构体指针,句炳(NULL获取所有参数),消息最小直,消息最大直(设置成0是全部接收))
{
TranslateMessage(&msg);//对消息队列的内容进行转换
DispatchMessage(&msg);//把消息处理发放,给回凋函数
}
return 0;
//他是一个死循环,保证了程序一直在执行
}
//回凋函数
LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_CHAR: //按键消息
char szChar[20]; //定义一个20的数组
sprintf(szChar,"char is %d",wParam);//sprintf库函数,wParam的内存区当中存放键盘的ASC码把他格式化以%d形式到定义的szChar树组当中
MessageBox(hwnd,szChar,"提示",0);//MessageBox是消息框0 也可以换成MB_YESNO
break;
case WM_LBUTTONDOWN://鼠标键入消息
MessageBox(hwnd,"mouse clicked","提示",MB_OK);//消息框
HDC hdc;//定义一个hdc 是一个dc句炳(设备上下文)
hdc=GetDC(hwnd);//GetDC 获取DC句炳 hwnd窗口的句炳。说明显示在窗口上,确定位置
TextOut(hdc,0,50,"刘英平的个人程序",strlen("刘英平的个人程序"));
//TextOut 文本输出函数 1DC句炳 2 3文本位置(XY坐标) 4输出的内容 5 文本的字符数是多少strlen获取字符传的长度
ReleaseDC(hwnd,hdc);
//释放DC,释放内存
break;
case WM_PAINT://窗体重绘
HDC hDC;//定义DC
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);//获取DC
TextOut(hDC,0,0,"刘英平的个人程序",strlen("刘英平的个人程序"));
EndPaint(hwnd,&ps);//释放DC Begin,End Get,Release各是一队不很混用
//BeginPAINT,EndPAINT只能在WM_PAINT中使用,而Get,Release不能在WM_PAINT中使用
break;
case WM_CLOSE://关闭窗口响应的消息
if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))
{
DestroyWindow(hwnd);//销毁指定窗口DestroyWindow会发出一个WM_DESTROY响应函数
}
//IDYES是常量,一般放在前面容易改错,MB_YESNO中含有IDYES和IDNO等函数
break;
case WM_DESTROY:
PostQuitMessage(0);//销毁程序,DestroyWindow只是关闭的是窗口
//PostQuitMessage通知系统请求线成终止
//当上面的死循环GetMessage得到WM_QUIT消息的时候返回直是0,所以循环终止,WINMAIN函数退出,程序退出
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
//对缺省消息的处理,缺省消息的过程代码,返回直都为0
//只许在default中把hwnd,uMsg,wParam,lParam四个参数传递进去既可
}
return 0;
}
以上是windows而不是控制台