技术小咖之基于SDK的第一个windows图形界面程序
第一个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图形界面程序相关推荐
- 技术小咖之windows图形界面基础
windows图形界面基础 1.1. 基于SDK的第一个windows图形界面程序 1.1.1 第一个SDK应用程序hello world 1.利用vc6.0创建第一个SDK的windows图形界面应 ...
- idata界面_基于IData的航空多功能显示器图形界面
基于 IData 的航空多功能显示器图形界面 许少尉 ; 陈思宇 [期刊名称] <航空计算技术> [年 ( 卷 ), 期] 2013(043)003 [ 摘 要 ] It is a dif ...
- jdbc连接teradata仓库_技术分享:如何基于对象存储打造一个高性能、完全托管的PB级MPP数据仓库...
本文将介绍北京一家初创企业 HashData 构建基于云原生的 MPP 平台的过程.该企业利用对象存储作为数据持久层,Alluxio 作为云中的数据编排层,最终构建了一个原生云高性能 MPP 共享的体 ...
- 编写图形界面程序,接受用户输入的5个浮点数据和一个文件目录名,将这五个数据保存在该文件中,再从文件中读取出来并且进行从大到小排序,然后再一次追加保存在该文件中。
File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的 ...
- VS2012下基于Glut OpenGL显示一些立体图形示例程序:
Glut下提供了一些现成的绘制立体的API,如glutWireSphere绘制球,glutWireCone绘制椎体,glutWireCube绘制立体,glutWireTorus绘制甜圈,glutWir ...
- linux图形界面鼠标变成小手_win10系统中安装ubuntu子系统及图形界面
作为全球最流行且最有影响力的Linux开源系统之一,Ubuntu自发布以来在应用体验方面:有较大幅度的提升,即使对比Windows.MacoS等操作系统,最新版本的Ubuntu也不逊色.下面教大家在w ...
- “小咖秀”火爆的背后,给我们开发者带来的思考
我相信,在移动互联网时代,在互联网+的大环境中,我们每一位移动开发者都有一颗创业的心.不想创业的程序员不是好程序员,只想打工一辈子的程序员也永远干不了一辈子.说到这里看懂了的,绝对是程序猿.好了,言归 ...
- 七牛访谈|秒拍&小咖秀CTO汤力嘉:产品的生存系于技术
近日,七牛小伙伴.知名短视频社交产品"秒拍"."小咖秀"背后母公司炫一下科技宣布完成2亿美元D轮融资,并将继续深耕移动短视频领域,加大在移动短视频内容领域的投入 ...
- (转)开发仅用两天三个人,谈谈小咖秀背后的技术故事
摘自:http://www.infoq.com/cn/news/2015/10/xiaokaxiu-tech-story 小咖秀是一款非常火爆的移动视频拍摄应用,据爱范儿消息,它三个月的下载量就超过了 ...
- 《以太坊攻略》,小白如何逆袭成为技术大咖?要学的全在这里了
作者/ Daniel Que 编译/ kou 昨天,营长一直在劝诫小编,熊市不可怕,小编不能慌,小编也要学技术. 只有这样,天上掉"牛肉味"馅饼的时候,馅饼才能砸到站在第一排的小编 ...
最新文章
- iOS开发-由浅至深学习block
- mysql 字段授权_mysql授权管理
- 阿里发布图计算平台GraphScope,即将向全社会开源
- MATLAB 利用plot 画图,加标题,保存图片
- [转]linux 块设备驱动
- RS-232串行口连接线 com口连接线 并口链接线 双绞线 交叉线 直连线
- sql 语句中的 NULL值
- Remote System Upgrade With Cyclone III Devices
- Acwing第 26 场周赛【完结】
- 地图投影系列介绍(一)----地球空间模型
- 前端学习(2134):前端模块化雏形和common.js
- haproxy+keepalived实现高可用K8S集群部署
- 我们应学的11项技术[转载]
- 嘉年华回顾丨 王津银带你深入解析自动化运维能力框架
- 【JSP开发】有关session的登录注销的一个小例子
- php7扩展开发教程,Laravel 7 扩展开发教程
- CentOS6下Xen 4.1的安装(编译linux3.0内核)
- 前端笔记-201805
- 软件设计说明书模版(申请软件著作权可供参考)
- AD使用总结4——PCB天线知识
热门文章
- 手披云雾开鸿蒙,赞美泰山的诗句
- matlab中holdon的用法图解,Holdon有多少种用法?-hold on-英语-雷颇磺同学
- 怎样将计算机和电视机连接网络,家里怎么连接网络到电视机,让电脑和电视都可以上网。...
- android外汇软件开发,外汇ea回测预装基于Android9.0深度定制的操作系统
- 美团2018校园招聘内推笔试代码分享
- javascript nonono
- uva10066-双塔
- Hexo文章中图片点击实现全屏查看
- matlab 设计数字滤波器,基于Matlab的FIR数字滤波器设计
- 行驶证核验-行驶证核验查询-行驶证核验接口-行驶证核验查询接口-行驶证核验api接口-行驶证核验api