第一个SDK应用程序hello world

1、利用vc6.0创建第一个SDK的windows图形界面应用程序

运行Microsoft Visual C++ 6.0,选择file-->new子菜单,弹出相应窗口。

该对话框有四个选项卡:Files、Projects、workspace以及Othere Documents。

Files与创建文件有关。比如头文件、源文件。

Projects与创建工程有关。

Workspace与创建工作区有关。

Othere Documents 与创建微软的其他文件有关,比如word文档等。

我们选择Projects选项卡,Microsoft Visual C++ 6.0可以创建很多类型的工程,以适应不同的应用需求。其中常用的6种在图中用数字标示出来了。每种创建的工程如下:

①用于创建MFC 动态链接库

②用于创建MFC的应用程序

③用于创建SDK的win32应用程序

④用于创建控制台应用程序

⑤用于创建win32动态链接库(基于SDK的动态链接库 )

⑥用于创建win32的静态链接库(基于SDK的静态链接库 )

我们在学习c语言或c++时,都是创建的控制台应用程序,也就是选择的第4种。现在我们创建一个SDK的win32应用程序,必须选择第三项,也就是图中蓝色的选项。

控制台应用程序和SDK的win32应用程序有什么区别呢?

主要是Microsoft Visual C++ 6.0运行时库调用的入口函数不一样。

控制台应用程序调用的入口函数是:main函数。其函数原型为:

main( int argc, char *argv[ ], char *envp[ ] )。

win32应用程序应用程序的入口函数为:WinMain函数。其函数原型为:

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)。

一定要注意,如果创建的是控制台应用程序,而主函数使用的是 WinMain函数,编译是会出错的,因为控制台应用程序入口函数都是main函数。(初学者经常会犯这种错误而不自知)。

在Project name 中输入项目名the hello program。

在location文本框中输入项目的路径,或者点击location文本框后面的文件浏览按钮来选择文件路径。点击OK。

选择单选框的第二项。点Finish。

在新创建的工程中会自动给我们创建一个与工程名相同的.cpp文件。在文件中添加代码。其中加粗的部分为新添加的代码:

#include <windows.h>     //1:必须包含头文件windows.h

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; //2:声明窗口过程函数

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)     //3:windows应用程序的入口函数

{

static TCHAR szAppName[] = TEXT ("HelloWin") ;   //4:定义窗口类型名变量

     HWND         hwnd ;                           //5:定义窗口句柄

     MSG          msg ;                             //6:定义消息结构体对象

     WNDCLASS     wndclass ;                       //7:定义要注册的窗口结构体

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;   //8: 窗口风格

     wndclass.lpfnWndProc   = WndProc ;                       //9: 窗口过程函数

     wndclass.cbClsExtra    = 0 ;                       //10:该类型窗口的附加内存

     wndclass.cbWndExtra    = 0 ;                      //11:窗口对象的附加内存

     wndclass.hInstance     = hInstance ;   //12:窗口的应用程序实例句柄(产生窗口时有操作系统生成)

     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ; //13:应用程序图标

     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;    //14:应用程序光标

     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//15:应用程序背景刷

     wndclass.lpszMenuName  = NULL ;                  //16:应用程序菜单

     wndclass.lpszClassName = szAppName ;               //17:窗口类型

     if (!RegisterClass (&wndclass))           //18:在操作系统中注册第7~17步中定义的窗口类型

     {

          MessageBox (NULL, TEXT ("This program requires Windows NT!"),

                      szAppName, MB_ICONERROR) ;

          return 0 ;

     }

     hwnd = CreateWindow (szAppName,       //19:创建窗口,第一个参数为注册时的窗口类型名           

                       TEXT ("The Hello Program"),   //20:窗口标题

                        WS_OVERLAPPEDWINDOW, //21:窗口风格                              

                       CW_USEDEFAULT,          //22:窗口初始位置x坐标                                 

                       CW_USEDEFAULT,          //23:窗口初始位置y坐标                                  

                       CW_USEDEFAULT,          //24:窗口大小之宽度                              

                       CW_USEDEFAULT,          //25:窗口大小之高度                              

                       NULL,                     //26:父窗口句柄 

                       NULL,                     //27:窗口菜单句柄                         

                       hInstance,                   //28:应用程序实例句柄,与第12步中的一样

                       NULL                      //29:传递给窗口过程函数的lParam参数指针   

         ) ;

     ShowWindow (hwnd, iCmdShow) ;                //30:显示窗口

     UpdateWindow (hwnd) ;                         //31:更新窗口

     while (GetMessage (&msg, NULL, 0, 0))           //32:消息循环

     {

          TranslateMessage (&msg) ;                 //33:消息转换

          DispatchMessage (&msg) ;                 //34:分派消息

     }

     return msg.wParam ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{//35:窗口过程函数,也叫回调函数

     HDC         hdc ;        //36:设备上下文句柄

     PAINTSTRUCT ps ;        //37:调用BeginPaint获取设备句柄是需要传递的参数

     RECT        rect ;        //38:矩形结构体对象

     switch (message)           //39:处理消息

     {

     case WM_CREATE:        //40:处理WM_CREATE消息

          PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;

          return 0 ;

     case WM_PAINT:         //41:处理WM_PAINT

          hdc = BeginPaint (hwnd, &ps) ;

          GetClientRect (hwnd, &rect) ;

          DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,

                    DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

          EndPaint (hwnd, &ps) ;

          return 0 ;

     case WM_DESTROY:    //42:处理WM_DESTROY

          PostQuitMessage (0) ;   //43:发送一个WM_QUIT消息

          return 0 ;

     }

     return DefWindowProc (hwnd, message, wParam, lParam) ;  //44:调用windows默认的窗口过程函数

}

技术小咖之基于SDK的第一个windows图形界面程序相关推荐

  1. 技术小咖之windows图形界面基础

    windows图形界面基础 1.1. 基于SDK的第一个windows图形界面程序 1.1.1 第一个SDK应用程序hello world 1.利用vc6.0创建第一个SDK的windows图形界面应 ...

  2. idata界面_基于IData的航空多功能显示器图形界面

    基于 IData 的航空多功能显示器图形界面 许少尉 ; 陈思宇 [期刊名称] <航空计算技术> [年 ( 卷 ), 期] 2013(043)003 [ 摘 要 ] It is a dif ...

  3. jdbc连接teradata仓库_技术分享:如何基于对象存储打造一个高性能、完全托管的PB级MPP数据仓库...

    本文将介绍北京一家初创企业 HashData 构建基于云原生的 MPP 平台的过程.该企业利用对象存储作为数据持久层,Alluxio 作为云中的数据编排层,最终构建了一个原生云高性能 MPP 共享的体 ...

  4. 编写图形界面程序,接受用户输入的5个浮点数据和一个文件目录名,将这五个数据保存在该文件中,再从文件中读取出来并且进行从大到小排序,然后再一次追加保存在该文件中。

    File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的 ...

  5. VS2012下基于Glut OpenGL显示一些立体图形示例程序:

    Glut下提供了一些现成的绘制立体的API,如glutWireSphere绘制球,glutWireCone绘制椎体,glutWireCube绘制立体,glutWireTorus绘制甜圈,glutWir ...

  6. linux图形界面鼠标变成小手_win10系统中安装ubuntu子系统及图形界面

    作为全球最流行且最有影响力的Linux开源系统之一,Ubuntu自发布以来在应用体验方面:有较大幅度的提升,即使对比Windows.MacoS等操作系统,最新版本的Ubuntu也不逊色.下面教大家在w ...

  7. “小咖秀”火爆的背后,给我们开发者带来的思考

    我相信,在移动互联网时代,在互联网+的大环境中,我们每一位移动开发者都有一颗创业的心.不想创业的程序员不是好程序员,只想打工一辈子的程序员也永远干不了一辈子.说到这里看懂了的,绝对是程序猿.好了,言归 ...

  8. 七牛访谈|秒拍&小咖秀CTO汤力嘉:产品的生存系于技术

    近日,七牛小伙伴.知名短视频社交产品"秒拍"."小咖秀"背后母公司炫一下科技宣布完成2亿美元D轮融资,并将继续深耕移动短视频领域,加大在移动短视频内容领域的投入 ...

  9. (转)开发仅用两天三个人,谈谈小咖秀背后的技术故事

    摘自:http://www.infoq.com/cn/news/2015/10/xiaokaxiu-tech-story 小咖秀是一款非常火爆的移动视频拍摄应用,据爱范儿消息,它三个月的下载量就超过了 ...

  10. 《以太坊攻略》,小白如何逆袭成为技术大咖?要学的全在这里了

    作者/ Daniel Que 编译/ kou 昨天,营长一直在劝诫小编,熊市不可怕,小编不能慌,小编也要学技术. 只有这样,天上掉"牛肉味"馅饼的时候,馅饼才能砸到站在第一排的小编 ...

最新文章

  1. iOS开发-由浅至深学习block
  2. mysql 字段授权_mysql授权管理
  3. 阿里发布图计算平台GraphScope,即将向全社会开源
  4. MATLAB 利用plot 画图,加标题,保存图片
  5. [转]linux 块设备驱动
  6. RS-232串行口连接线 com口连接线 并口链接线 双绞线 交叉线 直连线
  7. sql 语句中的 NULL值
  8. Remote System Upgrade With Cyclone III Devices
  9. Acwing第 26 场周赛【完结】
  10. 地图投影系列介绍(一)----地球空间模型
  11. 前端学习(2134):前端模块化雏形和common.js
  12. haproxy+keepalived实现高可用K8S集群部署
  13. 我们应学的11项技术[转载]
  14. 嘉年华回顾丨 王津银带你深入解析自动化运维能力框架
  15. 【JSP开发】有关session的登录注销的一个小例子
  16. php7扩展开发教程,Laravel 7 扩展开发教程
  17. CentOS6下Xen 4.1的安装(编译linux3.0内核)
  18. 前端笔记-201805
  19. 软件设计说明书模版(申请软件著作权可供参考)
  20. AD使用总结4——PCB天线知识

热门文章

  1. 手披云雾开鸿蒙,赞美泰山的诗句
  2. matlab中holdon的用法图解,Holdon有多少种用法?-hold on-英语-雷颇磺同学
  3. 怎样将计算机和电视机连接网络,家里怎么连接网络到电视机,让电脑和电视都可以上网。...
  4. android外汇软件开发,外汇ea回测预装基于Android9.0深度定制的操作系统
  5. 美团2018校园招聘内推笔试代码分享
  6. javascript nonono
  7. uva10066-双塔
  8. Hexo文章中图片点击实现全屏查看
  9. matlab 设计数字滤波器,基于Matlab的FIR数字滤波器设计
  10. 行驶证核验-行驶证核验查询-行驶证核验接口-行驶证核验查询接口-行驶证核验api接口-行驶证核验api