鱼C论坛

 找回密码
 立即注册
查看: 3612|回复: 6

[技术交流] 《一日一节,低级走向高级》第一节:典型的SDK程序

[复制链接]
发表于 2011-11-25 19:18:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 LinSSun 于 2011-11-25 19:21 编辑
  1. //该帖子源代码转自
  2. //VC驿站
  3. //作者 : 歌帝圣尊
  4. //转载原因 :很不错!
  5. //遗憾 : 不能做成视频讲解!
  6. //版权 : 如有作者有任何问题,请联系此论坛ID删除帖子!
  7. //菜鸟我甚舍得这么好的帖子没人愿意看,就自作主张的进行一下下文字讲解!如果错误还请指出!
  8. //其中很多用到的函数不一一细讲了,还靠自己去MSDN, 谷歌百度,

  9. //下面是作者源代码(不过我加了一些文字讲解!)

  10. //开始先说一下在VC++6.0中windows32位程序工程的创建!
  11. //如入门时学时一样,不过我们这次建立的是Win32 Application工程,
  12. //而不是之前的Win32 Console Application控制台了!
  13. //然后就是建立c源文件,和入门时用VC++6.0建立是一样的!

  14. //ok,准备动作到此!
  15. //我们将来对下面的代码进行讲解!

  16. //和c程序一样,windows程序也需要包含一些主要的头文件,
  17. //而 windows.h 就如 stdio.h 一样,里面有很多windows编程要用到的函数的声明定义
  18. #include<windows.h>


  19. //全局变量

  20. //这个先理解为窗口类的一个名字
  21. TCHAR tWindowClassName[] = TEXT("演示程序");

  22. //这个为窗口标题的名字
  23. TCHAR tWindowTitleName[] = TEXT("主窗口标题");


  24. //窗口过程函数
  25. //窗口过程函数:说俗一点就是一个对一系列消息处理的函数

  26. //hWnd:窗口句柄(先不用郁闷窗口句柄是什么,你就当它是用来标识窗口的一个把柄)
  27. //msg:通俗讲来就是消息,而这个函数就是对消息进行你想处理的处理
  28. //wParam:应该属于消息附带的一些信息
  29. //lParam:应该属于消息附带的一些信息
  30. //(如:当窗口大小发生改变时,它的高位与地位,分别存储这新窗口的宽度,高度)
  31. LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam , LPARAM lParam);


  32. //和C程序一样,有程序的入口点

  33. //hInstance:实例句柄
  34. //hPrevInstance:现在的windows系统中基本已经不用这个了,默认为NULL
  35. //lpCmdLine:这个应该是属于命令调用模式才用到和C的main函数里面的参数一样
  36. //(基础不好就是这样,有些不懂,引以警戒)
  37. //nCmdShow:说是当用命令调用是窗口的显示方式(最大化,最小化.....)
  38. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int nCmdShow)
  39. {
  40.         
  41.         WNDCLASS        wnd;    //窗口类声明
  42.         HWND            hWnd;   //窗口句柄变量声明
  43.         MSG             msg;    //消息结构
  44.         
  45.         //填充窗口类
  46.         wnd.cbClsExtra          = 0;    //这两个默认为0
  47.         wnd.cbWndExtra          = 0;    //这两个默认为0(具体有什么别的用处,我也是菜鸟不知道)
  48.         
  49.         //画刷:BLACK_BRUSH为系统定义好的背景画刷(黑色?)
  50.         wnd.hbrBackground       = (HBRUSH)GetStockObject(BLACK_BRUSH);        
  51.         //鼠标样式:都有很多定义好的宏供使用
  52.         wnd.hCursor             = LoadCursor(NULL, IDC_ARROW);
  53.         //窗口的图标
  54.         wnd.hIcon               = LoadIcon(NULL, IDI_APPLICATION);
  55.         //程序的实例句柄(实例句柄和窗口句柄hWnd不一样的)
  56.         wnd.hInstance           = hInstance;
  57.         //链接我们定义的窗口过程函数
  58.         wnd.lpfnWndProc         = WndProc;
  59.         //窗口类名称,还记得那个全局变量不?
  60.         wnd.lpszClassName       = tWindowClassName;
  61.         //如果你这个程序没有菜单,那就为NULL
  62.         wnd.lpszMenuName        = NULL;
  63.         //指定样式,这两个宏定义CS_HREDRAW | CS_VREDRAW用异或运算符或起来,
  64.         //表示:当需要重新绘制整个窗口时重绘窗口,
  65.         //当窗口大小发生改变时重绘窗口.....
  66.         wnd.style               = CS_HREDRAW | CS_VREDRAW;

  67.         //注册窗口类,当注册不成时!
  68.         if (!RegisterClass(&wnd))
  69.         {
  70.                 MessageBox(NULL, TEXT("注册不成功!"), TEXT("系统提示"), 0);
  71.                 return 0;
  72.         }

  73.         //创建窗口,他的返回值为窗口的句柄
  74.         hWnd = CreateWindow(
  75.                    tWindowClassName,       //窗口类名
  76.                    tWindowTitleName,       //窗口标题名
  77.                    WS_OVERLAPPEDWINDOW,    //表示:窗口是否带最大化,最小化,......
  78.                    0,                      //窗口从哪个位置显示(横坐标)
  79.                    0,                      //窗口从哪个位置显示(纵坐标)
  80.                    400,                    //窗口的宽度
  81.                    300,                    //窗口的高度
  82.                    NULL,                   //父窗口的句柄,如果当前窗口为第一个窗口那么为NULL
  83.                    NULL,                   //是否带菜单,如果没有为NULL
  84.                    hInstance,              //实例句柄
  85.                    NULL                    //如果有父窗口,可能会从父窗口传递消息,如果没有父窗口则为NULL
  86.                    );

  87.         //当hWnd为NULL时创建窗口失败
  88.         if(!hWnd)
  89.                 return 0;

  90.         //显示并更新窗口
  91.         //这两个函数,自己查去.嘿嘿!
  92.         ShowWindow(hWnd,nCmdShow);
  93.         UpdateWindow(hWnd);

  94.         //设置消息循环
  95.         //这个消息循环比较重要,是应该是windows程序中必须的一部分
  96.         

  97.         //从消息队列中获取消息
  98.         while(GetMessage(&msg, NULL, 0, 0))
  99.         {
  100.                 //检查是否有键盘消息,如果有则进行一些处理
  101.                 TranslateMessage(&msg);
  102.                 //发送消息到窗口过程函数
  103.                 DispatchMessage(&msg);
  104.         }

  105.         return msg.lParam;
  106. }





  107. //窗口过程函数
  108. //窗口过程函数:说俗一点就是一个对一系列消息处理的函数

  109. //hWnd:窗口句柄(先不用郁闷窗口句柄是什么,你就当它是用来标识窗口的一个把柄)
  110. //msg:通俗讲来就是消息,而这个函数就是对消息进行你想处理的处理
  111. //wParam:应该属于消息附带的一些信息
  112. //lParam:应该属于消息附带的一些信息(如:当窗口大小发生改变时,它的高位与地位,分别存储这新窗口的宽度,高度)
  113. LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam , LPARAM lParam)
  114. {
  115.         //这里,C语言基础好的就知道是什么了
  116.         //如果msg和下面的选项相等,那就执行其中的语句
  117.         switch(msg)
  118.         {
  119.                 //WM_DESTROY消息响应
  120.                 //当关闭窗口进行销毁窗口时会发送这么一个消息WM_DESTROY
  121.         case WM_DESTROY:
  122.                 {
  123.                         //然后咱们自己又给发送一个消息,说"给我Kill掉这个程序对应的进程"
  124.                         PostQuitMessage(0);
  125.                         return 0;
  126.                 }

  127.                 //不关心的消息使用缺省处理
  128.         default:
  129.                 return DefWindowProc(hWnd, msg, wParam, lParam);
  130.         }
  131. }
复制代码
效果图:

                               
登录/注册后可看大图

附件: 1.rar (10.49 KB, 下载次数: 7)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-25 22:10:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-25 23:33:47 | 显示全部楼层
下载次数0:'(:'(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-26 13:06:02 | 显示全部楼层
嗯,这种代码并不需要大家能自己写出来,一般都是copy后修改或者用IDE生成后自己修改的。所以虽然看起来很长但实际要改的地方并不多,况且作者还加了注释,所以修改起来就更方便了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-29 00:55:26 | 显示全部楼层
还有呢?干麻不一起上。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-29 14:04:05 | 显示全部楼层
有代码了,还下载么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-2 15:09:08 | 显示全部楼层
膜拜中。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 13:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表