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图形界面基础相关推荐

  1. 视频教程-精通Win32 API编程-Windows图形界面编程-C/C++

    精通Win32 API编程-Windows图形界面编程 黄强老师,国家软件设计师,软件开发工程师,项目经理.产品经理.培训讲师. 创业合伙人,多年C.C++开发经验,尤擅长移动互联网项目的开发! 黄强 ...

  2. windows图形编程基础

    windows图形编程基础 2010年08月30日 图形设备接口(GDI,Graphics Device Interface)的主要目标之一是支持在输出设备(如视频显示器.打印机和绘图仪)上的与设备无 ...

  3. Java 图形界面基础

    Java图形界面基础 当你开始验证自己的PC的JDK环境是否配置完成的时候有没有想过这个窗体是怎么做出来的呢? 用几句简单的Java语言就可以做出这样的窗体,不信我可以写给给位看. import ja ...

  4. 计算机图形编程基础,Windows图形编程基础.ppt

    Windows图形编程基础 软件教研室 计算机图形学 第三章 Window图形编程基础 一.设备描述表DC及相关的MFC类 二.图形设备接口(GDI : Graphics device Interfa ...

  5. 如何用cmd命令和Windows图形界面将用户添加到远程桌面用户组#详细操作步骤

    一,cmd命令添加 首先我们得了解一下用户组管理命令和组管理命令 1.cmd以管理员方式打开 2.创建一个普通用户a  密码:a 3.将a用户添加到远程桌面组   (若用户是管理员或用户在管理员组,则 ...

  6. linux装nvidia驱动没有图形界面,[转]Fedora 13下安装Nvidia显卡驱动的方法/Linux无法进入X Windows 图形界面的解决方法...

    再试一试这个方法:[转自]http://www.myexception.cn/image/505352.html VirtualBox3.1.2安装Fedora12后无法启动图形界面问题 Virtua ...

  7. 【linux】图形界面基础知识(X、X11、GNOME、Xorg、KDE的概念和它们之间的关系)

    转载自:https://blog.csdn.net/zhangxinrun/article/details/7332049 简介 LINUX初学者经常分不清楚linux和X之间,X和Xfree86之间 ...

  8. Java四则运算小游戏(用户图形界面)

    文章目录 前言 一.Java背景故事 二.代码编写 1.工具类 2.主窗口类 3.游戏窗口类 4.参数设置窗口类 5.参数设置提示窗口类 总结 前言 通过这个小游戏可以对Java用户图形界面的基础方面 ...

  9. matlab创建图形用户界面,Matlab 用户图形界面 基础 (一)

    创建 MATLAB 用户图形界面必须由三个基本元素: 1.组件 在 MATLAB GUI 中的每一个项目(按钮,标签,编辑框等)都是一个图形化组件组件可分为三类:图形化控件(按钮,编辑框,列表,滑动条 ...

最新文章

  1. Gauss-Seidel迭代求解线性方程组
  2. CUDA编程--实现并行矩阵乘法【80行代码】
  3. 使用VS2008怎么连接自带的SQL Server2005的Express版本数据库
  4. Spring-AOP 自动创建代理之AnnotationAwareAspectJAutoProxyCreator
  5. 将二叉树的叶子结点转换成单链表,并返回最左叶子结点的地址(链头)
  6. 【redis】批量删除key
  7. 41)子类和父类的内存关系
  8. loadrunner发送json_Loadrunner模拟JSON接口请求进行测试
  9. disabled运用;div,li元素禁用点击事件;防止a标签打开url;禁用click事件,删除onclick
  10. C语言中负数补码的方法,c语言里求负数补码的总结不足与优点.docx
  11. 【TensorFlow-windows】(四) CNN(卷积神经网络)进行手写数字识别(mnist)
  12. Bailian2766 最大子矩阵【最大子段和+DP】
  13. 4个空格 tab vetur_Python成为专业人士笔记–程序行空白及tab缩进的作用
  14. 大意导致Java访问DB2库时导出SQLCODE=-301, SQLSTATE=07006错误
  15. 华为路由交换工程师学习笔记汇总
  16. MTK平台download烧录大全
  17. html单位pt,CSS单位之pt和px的区别是什么
  18. Winform做一个仿360界面
  19. Python基础知识点回顾
  20. Java中如何处理空指针异常

热门文章

  1. python windows桌面程序开发_Python 零基础入门
  2. 综合题(分析句子) C城交通
  3. iOS中的文件管理操作
  4. Windows XP 或 Windows Vista ,win7,win8.1 升级到win10
  5. 如何用初级的JavaWeb知识写一个较简单的网站(一)
  6. 优雅编程之这样处理继承关系,你就“正常”了(二十六)
  7. c语言编写猜灯谜程序,有奖竞猜 有奖竞猜啥意思
  8. 游程理论提取灾害事件特征---基于MATLAB语言的编程实现
  9. 基于Java+SpringBoot制作一个论坛小程序
  10. MySQL添加用户并授予权限