windows API接口

#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而不是控制台

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值