qwerdfb2418 发表于 2015-3-23 09:11:50

带注释的码,这是照小甲鱼教程编的,注释是详解,要的拿走

本帖最后由 qwerdfb2418 于 2015-3-23 13:36 编辑

/*基本窗口模型根据小甲鱼教程编写(注释自己加的)*/
/*窗口的诞生:窗口类结构-注册窗口类-创建窗口实例-显示窗口-更新窗口(不可以忽略)-消息循环*/
#include<Windows.h>//Windows编程
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//回调函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
      static TCHAR szAppName[]=TEXT("my windows");//定义窗口类名字
      HWND hwnd;//窗口的句柄(句柄是一个特殊的指针)
      MSG msg;//消息机制
      WNDCLASS wndclass;//窗口类结构
      /*Windows的窗口都是基于窗口类创建的*/
      wndclass.style=CS_HREDRAW|CS_VREDRAW;//调整高度、宽度重绘窗口(注:无法重绘也可调整窗口,但是调整后文字位置不改变)
      wndclass.lpfnWndProc=WndProc;//指定窗口过程
      wndclass.cbClsExtra=0;//额外空间一般为0
      wndclass.cbWndExtra=0;//额外空间一般为0
      wndclass.hInstance=hInstance;//句柄,与winmain第一个参数对应
      wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//为基于该窗口类的窗口设定一个图标,此为普通图标
      wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//为基于该窗口类的窗口设定一个鼠标指针
      wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//whitebrush为背景颜色,可以更改
      wndclass.lpszMenuName=NULL;//菜单名字(本程序没有菜单,所以为空)
      wndclass.lpszClassName=szAppName;//窗口类的名字,对应第7行
      /*下边为注册*/
      if(!RegisterClass(&wndclass))//判断是否是非Windows系统,如果是则提示无法运行并退出
      {
                MessageBox(NULL,TEXT("这个程序在Windows才能执行!"),szAppName,MB_ICONERROR);
                return 0;
      }
      /*丰富更多个性化特征,下段结束后实例已经诞生*/
      hwnd=CreateWindow(szAppName,//窗口类名称(基于哪一个窗口类)
                TEXT("鱼c工作室"),//窗口标题
                WS_OVERLAPPEDWINDOW,//窗口风格(也称窗口格式)
                CW_USEDEFAULT,//初始x坐标(这里使用的都是默认,下边的三个也一样)
                CW_USEDEFAULT,//初始y坐标
                CW_USEDEFAULT,//初始x方向尺寸
                CW_USEDEFAULT,//初始y方向尺寸
                NULL,//父窗口句柄
                NULL,//窗口菜单句柄
                hInstance,//程序实例句柄
                NULL);//创建参数
      /*扩展:CS类风格选项,CW创建窗口选项,DT文本绘制选项,IDI图标的ID号,
      IDC光标的ID号,MB消息框选项,SND声音选项,WM窗口消息,WS窗口风格*/
      ShowWindow(hwnd,iCmdShow);//展示此窗口(将窗口显示出来)
      UpdateWindow(hwnd);//更新窗口
      /*消息队列的三点补充:1.消息队列是FIFO的形式(先进先出)2.特例:WM_PAINT,WM_TIMER,WM_QUIT,在消息队列最后
      3.消息分为队列化消息和非队列化消息*/
      /*下为消息循环*/
      while(GetMessage(&msg,NULL,0,0))//通过此循环获得消息,若返回值为0则退出(WM_QUIT),&msg为指针,
      {
                TranslateMessage(&msg);//将消息进行翻译
                DispatchMessage(&msg);//分派消息对应第九行
      }
      return msg.wParam;
}
/*回调函数*/
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
      HDC hdc;
      PAINTSTRUCT ps;
      RECT rect;

      switch(message)
      {
      case WM_PAINT://绘制窗口
                        hdc=BeginPaint(hwnd,&ps);//绘画初始化
                        GetClientRect(hwnd,&rect);//获得客户区位置坐标信息
                        DrawText(hdc,TEXT("大家好,这是我的第一个窗口程序!"),-1,&rect,
                              DT_SINGLELINE|DT_CENTER|DT_VCENTER);//一行,居中,垂直居中
                        EndPaint(hwnd,&ps);
                        return 0;
      //此段后加
      case WM_LBUTTONDOWN://左键按下
                MessageBox(NULL,TEXT("哎呀,我被按了一下"),TEXT("啊,舒服"),MB_OK);
                return 0;

      case WM_DESTROY://关闭的消息,下文可以部署代码(例如:保存、退出)注:不可挽回窗口(详见小甲鱼视频)
                              PostQuitMessage(0);//发送退出消息
                              return 0;
      }
      return DefWindowProc(hwnd,message,wParam,lParam);//操作系统以默认方式处理消息
}
/*程序结束*/就是这些了

qwerdfb2418 发表于 2015-3-23 09:16:47

本帖最后由 qwerdfb2418 于 2015-3-23 09:46 编辑

大家还是要多打几回。。。

qwerdfb2418 发表于 2015-3-23 09:19:47

本帖最后由 qwerdfb2418 于 2015-3-23 09:47 编辑

顶起。由于是学生没有钱啊...否则充值支持下小甲鱼

qwerdfb2418 发表于 2015-3-23 09:48:38

希望大家帮我顶一下...

freeparty 发表于 2015-3-23 12:44:02

谢谢楼主哦。

freeparty 发表于 2015-3-23 12:44:10

我来支持一下。

~风介~ 发表于 2015-3-23 20:23:40

表示正好用得上,谢谢啦!{:7_123:}

らHorizon°Eter 发表于 2015-4-6 20:58:30

还是整套mfc来注释吧,这些都太……:big

laishiba 发表于 2015-5-7 17:40:46

支持一个

citian3094 发表于 2015-5-22 18:23:24

谢谢分享!

溯月0503 发表于 2015-5-25 17:59:12

{:1_1:}

zxc54 发表于 2017-6-9 11:00:34

不错,感谢分享
页: [1]
查看完整版本: 带注释的码,这是照小甲鱼教程编的,注释是详解,要的拿走