技术小咖之windows图形界面基础
windows图形界面基础
1.1、 基于SDK的第一个windows图形界面程序
1.1.1 第一个SDK应用程序hello world
1、利用vc6.0创建第一个SDK的windows图形界面应用程序
运行Microsoft Visual C++ 6.0,选择file-->new子菜单,弹出如下窗口:
图1-1 创建SDK应用程序
该对话框有四个选项卡: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默认的窗口过程函数 } |
编译,运行上述代码,出现如下图形界面::
技术小咖之windows图形界面基础相关推荐
- 视频教程-精通Win32 API编程-Windows图形界面编程-C/C++
精通Win32 API编程-Windows图形界面编程 黄强老师,国家软件设计师,软件开发工程师,项目经理.产品经理.培训讲师. 创业合伙人,多年C.C++开发经验,尤擅长移动互联网项目的开发! 黄强 ...
- windows图形编程基础
windows图形编程基础 2010年08月30日 图形设备接口(GDI,Graphics Device Interface)的主要目标之一是支持在输出设备(如视频显示器.打印机和绘图仪)上的与设备无 ...
- Java 图形界面基础
Java图形界面基础 当你开始验证自己的PC的JDK环境是否配置完成的时候有没有想过这个窗体是怎么做出来的呢? 用几句简单的Java语言就可以做出这样的窗体,不信我可以写给给位看. import ja ...
- 计算机图形编程基础,Windows图形编程基础.ppt
Windows图形编程基础 软件教研室 计算机图形学 第三章 Window图形编程基础 一.设备描述表DC及相关的MFC类 二.图形设备接口(GDI : Graphics device Interfa ...
- 如何用cmd命令和Windows图形界面将用户添加到远程桌面用户组#详细操作步骤
一,cmd命令添加 首先我们得了解一下用户组管理命令和组管理命令 1.cmd以管理员方式打开 2.创建一个普通用户a 密码:a 3.将a用户添加到远程桌面组 (若用户是管理员或用户在管理员组,则 ...
- linux装nvidia驱动没有图形界面,[转]Fedora 13下安装Nvidia显卡驱动的方法/Linux无法进入X Windows 图形界面的解决方法...
再试一试这个方法:[转自]http://www.myexception.cn/image/505352.html VirtualBox3.1.2安装Fedora12后无法启动图形界面问题 Virtua ...
- 【linux】图形界面基础知识(X、X11、GNOME、Xorg、KDE的概念和它们之间的关系)
转载自:https://blog.csdn.net/zhangxinrun/article/details/7332049 简介 LINUX初学者经常分不清楚linux和X之间,X和Xfree86之间 ...
- Java四则运算小游戏(用户图形界面)
文章目录 前言 一.Java背景故事 二.代码编写 1.工具类 2.主窗口类 3.游戏窗口类 4.参数设置窗口类 5.参数设置提示窗口类 总结 前言 通过这个小游戏可以对Java用户图形界面的基础方面 ...
- matlab创建图形用户界面,Matlab 用户图形界面 基础 (一)
创建 MATLAB 用户图形界面必须由三个基本元素: 1.组件 在 MATLAB GUI 中的每一个项目(按钮,标签,编辑框等)都是一个图形化组件组件可分为三类:图形化控件(按钮,编辑框,列表,滑动条 ...
最新文章
- Gauss-Seidel迭代求解线性方程组
- CUDA编程--实现并行矩阵乘法【80行代码】
- 使用VS2008怎么连接自带的SQL Server2005的Express版本数据库
- Spring-AOP 自动创建代理之AnnotationAwareAspectJAutoProxyCreator
- 将二叉树的叶子结点转换成单链表,并返回最左叶子结点的地址(链头)
- 【redis】批量删除key
- 41)子类和父类的内存关系
- loadrunner发送json_Loadrunner模拟JSON接口请求进行测试
- disabled运用;div,li元素禁用点击事件;防止a标签打开url;禁用click事件,删除onclick
- C语言中负数补码的方法,c语言里求负数补码的总结不足与优点.docx
- 【TensorFlow-windows】(四) CNN(卷积神经网络)进行手写数字识别(mnist)
- Bailian2766 最大子矩阵【最大子段和+DP】
- 4个空格 tab vetur_Python成为专业人士笔记–程序行空白及tab缩进的作用
- 大意导致Java访问DB2库时导出SQLCODE=-301, SQLSTATE=07006错误
- 华为路由交换工程师学习笔记汇总
- MTK平台download烧录大全
- html单位pt,CSS单位之pt和px的区别是什么
- Winform做一个仿360界面
- Python基础知识点回顾
- Java中如何处理空指针异常
热门文章
- python windows桌面程序开发_Python 零基础入门
- 综合题(分析句子) C城交通
- iOS中的文件管理操作
- Windows XP 或 Windows Vista ,win7,win8.1 升级到win10
- 如何用初级的JavaWeb知识写一个较简单的网站(一)
- 优雅编程之这样处理继承关系,你就“正常”了(二十六)
- c语言编写猜灯谜程序,有奖竞猜 有奖竞猜啥意思
- 游程理论提取灾害事件特征---基于MATLAB语言的编程实现
- 基于Java+SpringBoot制作一个论坛小程序
- MySQL添加用户并授予权限