精华内容
下载资源
问答
  • Windows 7高级编程

    热门讨论 2014-04-26 13:42:37
    Windows7高级编程》内容提要:详细讲解了任务栏,例如直接从锁定的应用程序中选取。文件、检测应用程序状态等内容深入讨论了新功能 Ribbon并展示了如何高效使用Ribbon。讲解了库功能并展示了如何利用该功能来集中...
  • Windows 7脚本编程和命令行工具指南 中文完整版pdf,共526页,-Brian Knittel著,李军 等译 扫描版[带完整书签]
  • WINDOWS7高级编程

    2018-07-25 08:47:31
    WINDOWS7高级编程WINDOWS7高级编程WINDOWS7高级编程WINDOWS7高级编程WINDOWS7高级编程
  • Windows 7高级编程 中英文完整版 pdf [美]John Paul Mueller 著
  • 献给所有对技术抱有好奇心和热情的软件工程师们
  • Windows Phone 7高级编程 中文完整版

    热门讨论 2012-02-29 21:57:54
    Windows Phone 7高级编程 使用Visual Studio、Silverlight与XNA进行应用和游戏开发 中文完整版
  • Windows Phone 7高级编程中文版,pdf格式高清晰下载电子书,国内第一本全面完整讲解Windows手机开发的编程书籍。
  • windows shell编程指南与实例 (PDF版)

    热门讨论 2010-09-10 19:23:44
    windows shell编程指南与实例 PDF版 只有电子书,谁有光盘?
  • windows编程7

    2010-06-22 00:04:08
    windows编程7windows编程7windows编程7windows编程7windows编程7windows编程7windows编程7windows编程7windows编程7
  • 网络编程合集 TCP-IP详解 windows Linux UNIX Ace 网络编程 搜索关键字:网络编程 TCP-IP详解 windows Linux UNIX 网络编程1_TCP-IP详解卷1.rar ...网络编程7_UNIX网络编程电子书 看完这些,网络编程就会了,祝好运.
  • C语言Windows命令行编程

    千次阅读 2020-02-14 18:04:37
    Windows提供了很多DOS命令 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) 1. appwiz.cpl:程序和功能 2. calc:启动计算器 3. certmgr.msc:证书管理实用程序 4....
    1. Windows提供了很多DOS命令

    CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本)

    1. appwiz.cpl:程序和功能

    2. calc:启动计算器

    3. certmgr.msc:证书管理实用程序

    4. charmap:启动字符映射表

    5. chkdsk.exe:Chkdsk磁盘检查(管理员身份运行命令提示符)

    6. cleanmgr: 打开磁盘清理工具

    7. cliconfg:SQL SERVER 客户端网络实用工具

    8. cmstp:连接管理器配置文件安装程序

    9. cmd.exe:CMD命令提示符

    10. 自动关机命令

       Shutdown -s -t 600:表示600秒后自动关机

       shutdown -a :可取消定时关机

       Shutdown -r -t 600:表示600秒后自动重启

       rundll32 user32.dll,LockWorkStation:表示锁定计算机

    11. colorcpl:颜色管理,配置显示器和打印机等中的色彩

    12. CompMgmtLauncher:计算机管理

    13. compmgmt.msc:计算机管理

    …………………………..

     

    2、按下Win+R,输入cmd进入命令行模式

    3、ping  www.qq.com   是查看网络是否畅通

    4、运行如下的代码,打开本地用户和组管理器

    运行效果如下

    4、把IP路由打印出来

    运行效果如下:

    5、下面有很多的DOS命令通过system函数在程序中运行

    展开全文
  • 用C语言进行Windows编程入门

    万次阅读 多人点赞 2019-08-19 11:13:21
    用C语言进行Windows编程入门 本文对一般教程或网上有的(如C语言语法等基础)不深入介绍,对初学者易造成疑惑误解或难以找到的内容进行较详尽的介绍。 学习C语言很久了,一直面对控制台应用程序(Win32 Console ...

    用C语言进行Windows编程入门

    本文对一般教程或网上有的(如C语言语法等基础)不深入介绍,对初学者易造成疑惑误解或难以找到的内容进行较详尽的介绍。

    学习C语言很久了,一直面对控制台应用程序(Win32 Console Application),没有漂亮的界面,是不是不爽呀。用C开发图形界面程序,有多种技术方案,本文希望用简单的例子,深入浅出的介绍一种方案——用C和SDK进行图形界面编程。

    图形界面又叫图形用户接口(GUI = Graphical User Interface),这样的程序的窗口包含最大化、最小化、关闭按钮,也包含菜单、单选框、图像等组成。

    本文主题是用C语言进行Windows编程。

    一般而言,基于 Windows 的编程方式有两种。一种是使用 Windows  的 API(Application Programming Interface ,应用程序编程接口)函数,通常用  C/C++ 语言按相应的程序框架进行编程。这些程序框架往往就程序应用提供相应的文档、范例和软件开发工具包(Software Development Kit ,SDK ),所以这种编程方式有时又称为  SDK 方式。另一种是使用“封装”方式,例如Visual C++ 的MFC方式,它是将 SDK  中的绝大多数函数、 数据等按 C++“类”的形式进行封装,并提供相应的应用程序框架和编程操作,简单地说,MFC 是对 API 的封装,隐藏了许多复杂的情节。

    C语言源代码文件的后缀是.c,C++语言源代码文件的后缀是.cpp。

    要进行Windows编程,需要先对Windows 有一个初步认识

    Windows 的 3 个主要子系统:内核(kernel),用户(user),GDI。

    内核 负责操作系统的传统工作:如 内存管理,文件输入/输出 以及任务管理等。

    用户 指的是用户界面,负责所有的窗口管理。

    GDI 就是图形设备接口,负责在屏幕或打印机上显示文本与图形。

    在 Windows 程序中,调用 Windows 函数与调用 C 语言的库函数没有什么两样。

    最主要的区别就是 C 语言库函数的机器代码会直接链接到你的程序代码中去,而 Windows 函数则是放到你的程序之外的 DLL 里。

    关于这些,作为初学者可以大体了解之,不必深究,随着深入学习实线,经过一段时间,才会有清晰的认识。

    下面开发实验,先使用Dev-C++开发环境,然后在再介绍VC++开发环境。

    所谓开发环境,也就是安装编译器或者 IDE(集成开发环境)。Windows 下的C语言 IDE 众多,本人使用的是 Dev C++5.11。Dev C++ 是一款免费开源的 C/C++ IDE,内嵌 GCC 编译器(Linux GCC 编译器的 Windows 移植版),是 NOI、NOIP 等比赛的指定工具Dev C++ 的优点是体积小(只有几十兆)、安装卸载方便、学习成本低,适合于初学者使用,缺点是调试功能弱,功能并不完善,不易用来开发商业级的软件。

    VC++开发环境,讲了两种VC6.0(VC++6.0)和Microsoft Visual C++ 2010 Express。

    微软公司的VC6.0(VC++6.0)完整版在Win7、Win10中存在兼容问题,故使用VC++ 6.0第三方修改版本,在网上也容易找到。微软新版 Visual Studio(简称 VS,包含VC++),如VS2010、VS2015等,目前最新版式VS2019,功能越来越全面,但越来越庞大。全国计算机等级考试组委会决定,2018年全国计算机二级 C、C++两个科目的应用软件由 Visual C++6.0 改为 Visual C++ 2010 学习版(即 Visual C++ 2010 Express)。综合看来,C语言初学者,可以考虑VC++6.0第三方修改的版本,或者使用Microsoft Visual C++ 2010 Express

    为了便于学习者,我给出开发工具(C_C++实验学习环境合集)的下载地址:C及C++实验学习环境合集.rar_c++实验环境-C++工具类资源-CSDN下载

    所提的三种工具,对每一种都先演示控制台程序,再演示带界面的Windows程序。

    不带图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)的程序是控制台程序(Console Application)。带界面的Windows程序(Windows Application),也称为GUI程序(GUI Application)。

    Dev-C++开发使用

    下面简要介绍一下Dev C++的安装:

    下载完成后,就像安装其他软件一样,点击安装包,出现如下图,语言先默认选择English,不要改变(安装完成后会选择中文简体的选项设置)。点ok!

     

    接下来的安装界面点“I agree”按钮,之后,一路默认点击“next”按钮,直至“finish”,此时出现:

    此时你就可以选择 中文简体。

    控制台程序以 main() 为入口函数,Windows程序以 WinMain() 为入口函数,动态链接库(DLL)以 DllMain() 为入口函数(请查看 动态链接库DLL教程),不同的入口函数决定了不同类型的程序。

    从main  到WinMain

        学习编程一般从简单的例子入手,例如一个 C 程序常有下列简单的框架代码:

        #include <stdio.h>

        int main()

        {

          printf("Hello World!\n");                  /*输出*/

          return 0;                               /*指定返回值*/

          }

    该程序已包括  C 程序中最常用的 #include  指令、必须的程序入口  main 函数、库函数 printf  调用和 return 语句。由于此程序是在早期的DOS(Disk Operating System ,磁盘操作系统)环境的字符模型下运行的,因而 printf 函数所输出的都是字符流,也就是说,它在屏幕上输出一行文本“ Hello World!  ”。基于 Windows的上述 C 程序代码框架肯定是有所不同的。等价的 Windows  程序可以写成:

           #include <windows.h>

           int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow)

           {

             MessageBox (NULL, TEXT("Hello, World!"), TEXT("Hello"), 0) ;

             return 0 ;

           } 

    使用C和Win32 SDK开发Windows图形界面程序,运行时会显示黑乎乎的CMD窗口。原因是控制台(CONSOLE)程序,必然出现cmd窗口。如何不显示CMD窗口后面再说。

    该程序的 #include<windows.h> 就是像 C 语言的 #include<stdio.h> 一样重要的头文件。这些头文件定义了Windows的所有数据类型、函数原型、数据结构和符号常量,也就是说,所有的Windows API都在这些头文件中声明。

    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow),就像 C 语言的 int main(void) 一样,都是程序的入口。C 程序的入口是 main,Windows 程序的入口是 WinMain。WinMain() 函数的原型为:

    int WINAPI WinMain(

        HINSTANCE hInstance,  // 当前窗口句柄

        HINSTANCE hPrevInstance,  // 前一个窗口句柄,Win32下为NULL(Win16留下的废物,目前已弃用)

        LPSTR lpCmdLine,  // 命令行参数

        int nCmdShow  // 窗口显示方式

    );

    WinMain的第一个参数叫做"实例句柄"(Instance Handle)。句柄就是一个数值,用它来标识某些东西。句柄是一个 4byte 的数值,可用来标识 窗口,按钮,图标,滚动条,输出设备,控件或者文件等等。

    第二个参数通常是 NULL。

    第三个参数是用来运行程序的命令行(CommandLine)。

    第四个参数是用来指明程序最初如何显示。(最大化到全屏,正常显示,最小化到任务栏)。

    MessageBox函数:

     函数原型:int WINAPI MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);

    第一个参数通常是一个窗口句柄。

    第二个参数是在信息框里出现的文本字符串。

    第三个参数是标题栏上显示的文本字符串。

    第四个参数是以前缀MB_开头的一些常量组合。用以对话框中的按钮,图标等等。

    在输入代码时,一个好的习惯是创建了一个新程序后,在还未输入代码之前先将该程序保存到硬盘某个目录下,然后在程序的编辑过程中经常性地保存程序,以防止机器突然断电或者死机。要保存程序,只需从主菜单选择“File—〉Save”,此时会将程序重新保存到之前指定的目录下,如F:\temp ;如果想将程序保存到其他的硬盘路径下,可以选择“File—〉Save As…”

    【 插入一个话题,跳过这部分不影响理解本文:在Dev-C++上使用自己写头文件

    1.新建--源代码。注意:删去不必要的函数尤其是主函数,删去多余的定义,避免出现重复定义。数据类型用typedef定义。

    2.保存:在保存类型的下拉列表中选择Header Files

    3.写入函数,定义等

    4.别忘了保存

    5.引用:例:#include<路径\文件名.后缀>

    #include<C:\Users\lair\Desktop\hello.h>

    Dev C++安装第三方库(.h文件、头文件)

    注意兼容的才能使用。

    初学者容易被这些坑搞得心灰意冷。

    打开Dev-C++,点击工具栏,工具栏选择编译选项找到目录,C++包含文件,在C++包含文件中可以找到头文件添加的位置

    第三步  :电脑中找到这个位置,把第三方库(.h文件、头文件)复制粘贴过去:

    注意:不同系列编辑器(如TC++、DEV-C++、Visual C++)的头文件(.h文件、库)一般不兼容,使用时要注意。】

    如何不显示CMD窗口呢?参见下图:

    如此,可由Dev-C++自动生成一些代码——Windows图形界面框架代码 ,如下图:

    你可以将代码区的内容替换为:

    #include <windows.h>

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

    int WINAPI WinMain(
        HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        PSTR szCmdLine,
        int iCmdShow
    ){
        static TCHAR szClassName[] = TEXT("HelloWin");  //窗口类名
        HWND     hwnd;  //窗口句柄
        MSG      msg;  //消息
        WNDCLASS wndclass;  //窗口类

        /**********第①步:注册窗口类**********/
        //为窗口类的各个字段赋值
        wndclass.style = CS_HREDRAW | CS_VREDRAW;  //窗口风格
        wndclass.lpfnWndProc  = WndProc;  //窗口过程
        wndclass.cbClsExtra   = 0;  //暂时不需要理解
        wndclass.cbWndExtra   = 0;  //暂时不需要理解
        wndclass.hInstance    = hInstance;  //当前窗口句柄
        wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION);  //窗口图标
        wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW);  //鼠标样式
        wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH);  //窗口背景画刷
        wndclass.lpszMenuName = NULL ;  //窗口菜单
        wndclass.lpszClassName= szClassName;  //窗口类名

        //注册窗口
        RegisterClass(&wndclass);

        /*****第②步:创建窗口(并让窗口显示出来)*****/
        hwnd = CreateWindow(
            szClassName,  //窗口类的名字
            TEXT("Welcome"),  //窗口标题(出现在标题栏)
            WS_OVERLAPPEDWINDOW,  //窗口风格
            CW_USEDEFAULT,  //初始化时x轴的位置
            CW_USEDEFAULT,  //初始化时y轴的位置
            500,  //窗口宽度
            300,  //窗口高度
            NULL,  //父窗口句柄
            NULL,  //窗口菜单句柄
            hInstance,  //当前窗口的句柄
            NULL  //不使用该值
        );

        //显示窗口
        ShowWindow (hwnd, iCmdShow);
        //更新(绘制)窗口
        UpdateWindow (hwnd);

        /**********第③步:消息循环**********/
        while( GetMessage(&msg, NULL, 0, 0) ){
            TranslateMessage(&msg);  //翻译消息
            DispatchMessage (&msg);  //分派消息
        }

        return msg.wParam;
    }

    /**********第④步:窗口过程**********/
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
        HDC         hdc;  //设备环境句柄
        PAINTSTRUCT ps;
        RECT        rect;

        switch (message){
            //窗口绘制消息
            case WM_PAINT:
                hdc = BeginPaint (hwnd, &ps) ;
                GetClientRect (hwnd, &rect) ;
                DrawText(
                    hdc,
                    TEXT("你好,Windows世界"),
                    -1,
                    &rect,
                    DT_SINGLELINE | DT_CENTER | DT_VCENTER
                );
                EndPaint (hwnd, &ps) ;
                return 0 ;

            //窗口销毁消息
            case WM_DESTROY:
                PostQuitMessage(0) ;
                return 0 ;
        }
        return DefWindowProc(hwnd, message, wParam, lParam) ;
    }

    编译运行结果如下:

    这是一个简单Windows程序,Dev C++同时自动生成了其它几个文件,参见下图:

    为了便于管理使用,建议为每个用Dev-C++建立C项目(Project:工程,项目)建立一个文件夹(目录)。

    这是一个用Dev-C++的C语言开发最简单的Windows应用程序,有点吓人,显然不像控制台应用程序那么简单,几行代码搞定。这显然不是短时间就学透头,本文的目的是说明C语言是可以开发Windows应用程序的。

    上面例子代码,是一个Windows程序的基本框架,从中可以了Windows应用程序文件主要包括如下部分:

    第①部分、注册窗口类

    第②部分、根据窗口类来创建窗口

    第③部分、进入无休止的消息循环

    第④部分、编写窗口过程

    大部分代码一样,直接拿来当作代码模板用,主要不同是在第④部分。

    下面是一个像样点的程序,同时作为上述文字的印证:

    #include <windows.h>

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

    HINSTANCE hInst;   //HINSTANCE 是“句柄型”数据类型。---------

    int WINAPI WinMain(

        HINSTANCE hInstance,

        HINSTANCE hPrevInstance,

        PSTR szCmdLine,

        int iCmdShow

    ){

        static TCHAR szClassName[] = TEXT("Win32Demo");  //窗口类名

        HWND     hwnd;  //窗口句柄

        MSG      msg;  //消息

        WNDCLASS wndclass;  //窗口类

        hInst = hInstance;   //------------

        /**********第①步:注册窗口类**********/

        //为窗口类的各个字段赋值

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

        wndclass.lpfnWndProc  = WndProc;  //窗口过程

        wndclass.cbClsExtra   = 0;  //暂时不需要理解

        wndclass.cbWndExtra   = 0;  //暂时不需要理解

        wndclass.hInstance    = hInstance;  //当前窗口句柄

        wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION);  //窗口图标

        wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW);  //鼠标样式

        wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH);;  //窗口背景画刷(白色)

        wndclass.lpszMenuName = NULL ;  //窗口菜单

        wndclass.lpszClassName= szClassName;  //窗口类名

        //注册窗口

        RegisterClass(&wndclass);

        /*****第②步:创建窗口(并让窗口显示出来)*****/

        hwnd = CreateWindow(

            szClassName,  //窗口名字

            TEXT("Welcome"),  //窗口标题(出现在标题栏)

            WS_OVERLAPPEDWINDOW,  //窗口风格

            CW_USEDEFAULT,  //初始化时x轴的位置

            CW_USEDEFAULT,  //初始化时y轴的位置

            500,  //窗口宽度

            300,  //窗口高度

            NULL,  //父窗口句柄

            NULL,  //窗口菜单句柄

            hInstance,  //当前窗口的句柄

            NULL  //不使用该值

        );

        //显示窗口

        ShowWindow (hwnd, iCmdShow);

        //更新(绘制)窗口

        UpdateWindow (hwnd);

        /**********第③步:消息循环**********/

        while( GetMessage(&msg, NULL, 0, 0) ){

            TranslateMessage(&msg);  //翻译消息

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

        }

        return msg.wParam;

    }

     /**********第④步:消息循环**********/

     //------------

    LRESULT CALLBACK WndProc(

        HWND hWnd,

        UINT message,

        WPARAM wParam,

        LPARAM lParam

    ){

        int wmId, wmEvent;

        PAINTSTRUCT ps;

        HDC hdc;

        static HFONT hFont;

        static HWND hBtn;

        static HWND hStatic;

        switch (message){

            case  WM_CREATE:

                //创建逻辑字体

                hFont = CreateFont(

                    -15/*高度*/, -7.5/*宽度*/, 0, 0, 400 /*一般这个值设为400*/,

                    FALSE/*不带斜体*/, FALSE/*不带下划线*/, FALSE/*不带删除线*/,

                    DEFAULT_CHARSET,  //使用默认字符集

                    OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,  //这行参数不用管

                    DEFAULT_QUALITY,  //默认输出质量

                    FF_DONTCARE,  //不指定字体族*/

                    TEXT("微软雅黑")  //字体名

                );

                //创建静态文本控件

                hStatic = CreateWindow(

                    TEXT("static"),  //静态文本框的类名

                    TEXT("你好,欢迎来到C语言中文网"),  //控件的文本

                    WS_CHILD /*子窗口*/ | WS_VISIBLE /*创建时显示*/ | WS_BORDER /*带边框*/,

                    30 /*X坐标*/, 20/*Y坐标*/, 150/*宽度*/, 80/*高度*/, hWnd/*父窗口句柄*/,

                    (HMENU)1,  //为控件指定一个唯一标识符

                    hInst,  //当前实例句柄

                    NULL

                );

                //创建按钮控件

                hBtn = CreateWindow(

                    TEXT("button"), //按钮控件的类名

                    TEXT("点击这里试试"),

                    WS_CHILD | WS_VISIBLE | WS_BORDER | BS_FLAT/*扁平样式*/,

                    30 /*X坐标*/, 110 /*Y坐标*/, 150 /*宽度*/, 50/*高度*/,

                    hWnd, (HMENU)2 /*控件唯一标识符*/, hInst, NULL

                );

                SendMessage(hStatic,WM_SETFONT,(WPARAM)hFont,NULL);//设置文本框字体

                SendMessage(hBtn, WM_SETFONT, (WPARAM)hFont, NULL);//设置按钮字体

                break;

            case WM_COMMAND:

                wmId    = LOWORD(wParam);

                wmEvent = HIWORD(wParam);

                switch (wmId){

                    case 2:  //按下按钮

                        //更改文本框的内容

                        SetWindowText(hStatic, TEXT("你点击了下面的按钮"));

                        break;

                    default:

                        //不处理的消息一定要交给 DefWindowProc 处理。

                        return DefWindowProc(hWnd, message, wParam, lParam);

                }

                break;

            case WM_PAINT:

                hdc = BeginPaint(hWnd, &ps);

                // TODO:  在此添加任意绘图代码...

                EndPaint(hWnd, &ps);

                break;

            case WM_DESTROY:

                //请做好善后工作

                DeleteObject(hFont);

                PostQuitMessage(0);

                break;

            default:

                return DefWindowProc(hWnd, message, wParam, lParam);

        }

        return 0;

    }

    运行结果如下:

    现在介绍VC++6.0的使用

    先简要介绍VC6.0的使用, 微软原版的 VC6.0 已经不容易找到,网上提供的都是经过第三方修改的版本,删除了一些使用不到的功能,增强了和win10的兼容性。

    打开VC6.0,按下图所示操作新建工程(Project:工程,项目)

    提示:选择“An empty project”项将生成一个空的工程,工程内不包括任何东西。选择“A simple application”项将生成包含一个空的main函数和一个空的头文件的工程。选“A "Hello World!" application”项与选“A simple application”项没有什么本质的区别,只是包含有显示出“Hello World!”字符串的输出语句。选择“An application that supports MFC”项的话,可以利用VC6.0所提供的类库来进行编程。

    点击“Finish”按钮完成工程的创建。再按下图所示建立C源文件:

    提示:微软的VC++(Visual C++)是在C语言的基础上进行的扩展,C++已经包含了C语言的所有内容,所以大部分的 IDE 只有创建C++文件的选项,没有创建C语言文件的选项。但是这并不影响使用,我们在填写源文件名称时把后缀改为.c即可,编译器会根据源文件的后缀来判断代码的种类。

    再单击工具栏上的保存 按钮,在工作空间中可以看到刚才创建的工程和源文件,如下图所示:

    现在可以按下图所示编译并运行代码:

    注意:编译生成的 .exe 文件在工程(Project)目录下的Debug文件夹内。打开看到有一个Debug文件夹,进入可以看到 cDemo.exe。除了 hello.c,还会看到很多其他文件,它们是VC6.0自动创建的,用来支持当前工程,如下图:

    其中,dsp文件:DeveloperStudio Project,是VC6.0的工程文件,用来保存当前工程的信息,例如编译参数、包含的源文件等,不建议手动改动。当需要打开一个已存在的工程时,打开该文件即可

    上面介绍的是用VC++6.0建立Win32 Console Application,即win32控制台应用程序,没有漂亮的界面,运行时会显示黑乎乎的CMD窗口。Win32 Application(Win32应用程序) 是普通的常见的窗口应用程序,是所谓的GUI(Graphics User Interface图形用户接口),我们可以通过鼠标点击来完成控制。两者有明显的不同:

    控制台应用程序:
    入口函数为main,一般写C和C++计算类代码常用,如计算水仙花数、冒泡排序等一类程序。程序运行结果以命令行窗口显示。
    window应用程序:
    入口函数为WinMain,一般用于写桌面应用程序,强大之处在于能够作出用户操作界面,并与操作系统配合捕获并响应用户的各种操作,如鼠标移动、按钮形状及点击等基本上要用win32 api自己写代码实现,比较繁杂。

    顺便提及,MFC(微软基础类库)应用程序,也有界面,饭界面里的控件不需要自己去实现了,常用的控件都已经在MFC库内写好,直接拖动即可。

    只强调实用与开发效率,用MFC;强调用户体验与软件细节及灵活性,使用WIN32。MFC可以实现的,WIN32都可以实现,反之不可。

    VC++ 6.0可创建的工程类型还有一些,说实话我也知道的不多,就不提了。

    为了切合本文主题,下面介绍 用VC++ 6.0建立Win32 Application(Win32应用程序)。

    首先创建项目,选择File->New,出现如下对话框,并参见下图设置:

    添加C源文件,选择File->New,出现如下对话框,并参见下图设置

    输入如下代码(这段代码在本文的前面已出现过):

    #include <windows.h>

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

    HINSTANCE hInst;   //HINSTANCE 是“句柄型”数据类型。---------

    int WINAPI WinMain(

        HINSTANCE hInstance,

        HINSTANCE hPrevInstance,

        PSTR szCmdLine,

        int iCmdShow

    ){

        static TCHAR szClassName[] = TEXT("Win32Demo");  //窗口类名

        HWND     hwnd;  //窗口句柄

        MSG      msg;  //消息

        WNDCLASS wndclass;  //窗口类

        hInst = hInstance;   //------------

        /**********第①步:注册窗口类**********/

        //为窗口类的各个字段赋值

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

        wndclass.lpfnWndProc  = WndProc;  //窗口过程

        wndclass.cbClsExtra   = 0;  //暂时不需要理解

        wndclass.cbWndExtra   = 0;  //暂时不需要理解

        wndclass.hInstance    = hInstance;  //当前窗口句柄

        wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION);  //窗口图标

        wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW);  //鼠标样式

        wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH);;  //窗口背景画刷(白色)

        wndclass.lpszMenuName = NULL ;  //窗口菜单

        wndclass.lpszClassName= szClassName;  //窗口类名

        //注册窗口

        RegisterClass(&wndclass);

        /*****第②步:创建窗口(并让窗口显示出来)*****/

        hwnd = CreateWindow(

            szClassName,  //窗口名字

            TEXT("Welcome"),  //窗口标题(出现在标题栏)

            WS_OVERLAPPEDWINDOW,  //窗口风格

            CW_USEDEFAULT,  //初始化时x轴的位置

            CW_USEDEFAULT,  //初始化时y轴的位置

            500,  //窗口宽度

            300,  //窗口高度

            NULL,  //父窗口句柄

            NULL,  //窗口菜单句柄

            hInstance,  //当前窗口的句柄

            NULL  //不使用该值

        );

        //显示窗口

        ShowWindow (hwnd, iCmdShow);

        //更新(绘制)窗口

        UpdateWindow (hwnd);

        /**********第③步:消息循环**********/

        while( GetMessage(&msg, NULL, 0, 0) ){

            TranslateMessage(&msg);  //翻译消息

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

        }

        return msg.wParam;

    }

     /**********第④步:消息循环**********/

     //------------

    LRESULT CALLBACK WndProc(

        HWND hWnd,

        UINT message,

        WPARAM wParam,

        LPARAM lParam

    ){

        int wmId, wmEvent;

        PAINTSTRUCT ps;

        HDC hdc;

        static HFONT hFont;

        static HWND hBtn;

        static HWND hStatic;

        switch (message){

            case  WM_CREATE:

                //创建逻辑字体

                hFont = CreateFont(

                    -15/*高度*/, -7.5/*宽度*/, 0, 0, 400 /*一般这个值设为400*/,

                    FALSE/*不带斜体*/, FALSE/*不带下划线*/, FALSE/*不带删除线*/,

                    DEFAULT_CHARSET,  //使用默认字符集

                    OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,  //这行参数不用管

                    DEFAULT_QUALITY,  //默认输出质量

                    FF_DONTCARE,  //不指定字体族*/

                    TEXT("微软雅黑")  //字体名

                );

                //创建静态文本控件

                hStatic = CreateWindow(

                    TEXT("static"),  //静态文本框的类名

                    TEXT("你好,欢迎来到C语言中文网"),  //控件的文本

                    WS_CHILD /*子窗口*/ | WS_VISIBLE /*创建时显示*/ | WS_BORDER /*带边框*/,

                    30 /*X坐标*/, 20/*Y坐标*/, 150/*宽度*/, 80/*高度*/, hWnd/*父窗口句柄*/,

                    (HMENU)1,  //为控件指定一个唯一标识符

                    hInst,  //当前实例句柄

                    NULL

                );

                //创建按钮控件

                hBtn = CreateWindow(

                    TEXT("button"), //按钮控件的类名

                    TEXT("点击这里试试"),

                    WS_CHILD | WS_VISIBLE | WS_BORDER | BS_FLAT/*扁平样式*/,

                    30 /*X坐标*/, 110 /*Y坐标*/, 150 /*宽度*/, 50/*高度*/,

                    hWnd, (HMENU)2 /*控件唯一标识符*/, hInst, NULL

                );

                SendMessage(hStatic,WM_SETFONT,(WPARAM)hFont,NULL);//设置文本框字体

                SendMessage(hBtn, WM_SETFONT, (WPARAM)hFont, NULL);//设置按钮字体

                break;

            case WM_COMMAND:

                wmId    = LOWORD(wParam);

                wmEvent = HIWORD(wParam);

                switch (wmId){

                    case 2:  //按下按钮

                        //更改文本框的内容

                        SetWindowText(hStatic, TEXT("你点击了下面的按钮"));

                        break;

                    default:

                        //不处理的消息一定要交给 DefWindowProc 处理。

                        return DefWindowProc(hWnd, message, wParam, lParam);

                }

                break;

            case WM_PAINT:

                hdc = BeginPaint(hWnd, &ps);

                // TODO:  在此添加任意绘图代码...

                EndPaint(hWnd, &ps);

                break;

            case WM_DESTROY:

                //请做好善后工作

                DeleteObject(hFont);

                PostQuitMessage(0);

                break;

            default:

                return DefWindowProc(hWnd, message, wParam, lParam);

        }

        return 0;

    }

    注意,这里是用VC++ 6.0的C语言进行Windows编程, VC++ 6.0功能很多,如可以用C++和MFC(微软基础类库)进行Windows编程,并且可创建的工程类型很多,为符合本文主题未提及。

    Microsoft Visual C++ 2010 Express的使用

    打开 Microsoft Visual C++ 2010 Express,在菜单栏中选择“文件 --> 新建 --> 项目,参见下图:

    在“新建项目”对话框中:选择“Win32控制台应用程序”,填写好项目名称(如cDemo),选择好存储路径,点击“确定”按钮

    点击“确定”按钮后会弹“欢迎使用 Win32 应用程序向导”对话框

    点击下一步”按钮,弹出新的“应用程序设置”对话框

    先取消“预编译头”,再勾选“空项目”,然后点击“完成”按钮

    现在,就可以添加源文件参见下图:

    在“源文件”处右击鼠标,在弹出菜单中选择“添加 -> 新建项”出现“添加新项”对话框

    在“代码”分类中选择C++文件(.cpp),填写文件名(注意文件名后缀改为.c),点击“添加”按钮就添加了一个新的源文件

    输入如下代码

    #include <stdio.h>

    #include <stdlib.h>

    int main()

    {

        puts("你好!世界");

    system("pause");  //此句的作用就是让程序暂停一下

        return 0;

    }

    编译运行,参见下图:

    VC++2010开发的用应用程所在文件夹(目录)情况,如下图所示:

    其中:

    vcxproj是Visual C++ 2010(VC2010)的工程(Project:工程,项目)文件的后缀。 .vcxproj文件是自动生成生成的工程文件, 它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。 对于工程来说,是非常重要的。这个文件在转移工程时,不要删除。我们打开别人的项目,一些设置已经保存于此,如果只是拷贝代码文件,这些信息就不见了,就可能导致工程无法正常打开编译运行。

    sln是解决方案配置(solution)文件的后缀,Visual Studio开发套装进入.net时代后,使用解决方案文件(后缀为sln的文件)表示一个项目组,他通常包含一个项目中所有的工程文件信息。

    打开已存在的VC工程时,可以打开vcxproj文件或sln文件。打开sln文件是可以启动工程的,那是因为sln文件有工程文件的入口,sln是以解决方案的方式启动,打开vcxproj文件,则是以工程的名义启动的。

    顺便说明:关于MS VC++的工程文件的后缀

        vc6的工程文件是.dsp

        vc2002-2008工程文件是vcproj

        vc2010之后是vcxproj

    上面介绍的是用VC2010建立Win32 Console Application,即win32控制台应用程序。

    下面简要介绍用VC2010 建立Win32 Application(Win32应用程序):

    在菜单栏中选择“文件 --> 新建 --> 项目

    在“新建项目”对话框中:选择“Win32项目”,填写好项目名称(如winAppDemo),选择好存储路径,点击“确定”按钮

    点击“确定”按钮后会弹“欢迎使用 Win32 应用程序向导”对话框

    点击下一步”按钮,弹出新的“应用程序设置”对话框

    勾选“空项目”,然后点击“完成”按钮

    现在,就可以添加源文件

    在“源文件”处右击鼠标,在弹出菜单中选择“添加 -> 新建项”出现“添加新项”对话框

    在“代码”分类中选择C++文件(.cpp),填写文件名(注意文件名后缀改为.c),点击“添加”按钮就添加了一个新的源文件

    将前面“(这段代码在本文的前面已出现过)”部分下的代码输入,编译运行,参见下图:

    特别说明,所附代码肯定运行通过。断断续续写了几天,就到这儿吧。

    展开全文
  • Windows的API(Application Programming Interface,应用程序编程接口),是Windows 操作系统提供给应用程序的大量函数,学习本课程,不仅可以掌握Windows界面编程,开发华丽的Windows桌面运用程序,也可以为MFC框架...
    精通Win32 API编程-Windows图形界面编程—471人已学习 
    
    课程介绍    
    201804152252095515.png
        Windows的API(Application Programming Interface,应用程序编程接口),是Windows 操作系统提供给应用程序的大量函数,学习本课程,不仅可以掌握Windows界面编程,开发华丽的Windows桌面运用程序,也可以为MFC框架的学习奠定扎实的基础,同时是否熟练的掌握Windows API开发,也是企业考量优秀程序员一个非常重要的指标!
    课程收益
        掌握Windows界面编程,开发华丽的Windows桌面运用程序,也可以为MFC框架的学习奠定扎实的基础,同时是否熟练的掌握Windows API开发,也是企业考量优秀程序员一个非常重要的指标!
    讲师介绍
        黄强 更多讲师课程
        黄强老师,国家软件设计师,软件开发工程师,项目经理、产品经理、培训讲师、 创业合伙人,多年C、C++开发经验,尤擅长移动互联网项目的开发!
    课程大纲
        1. Windows API开发简介  12:33
        2. 第一个HelloWorld应用程序  6:27
        3. 入口函数WinMain详解  20:43
        4. Windows窗口程序简介  6:21
        5. Windows第一个窗口程序开发(上)  19:14
        6. Windows第一个窗口程序开发(下)  35:54
        7. Windows API常见数据类型  18:40
        8. 字符集SBCS、MBCS、UNICODE详解  31:23
        9. Windows消息驱动机制简介  14:20
        10. 线程和窗口的关系  26:11
        11. Windows各种消息  17:09
        12. Windows窗口的创建和销毁  25:04
        13. 窗口刷新WM_PAINT、WM_ERASEBKGND消息  48:43
        14. 窗口鼠标键盘消息  24:58
        15. Windows标准控件之按钮  31:01
        16. Windows标准控件之美化按钮  16:49
        17. Windows资源文件.rc  21:05
        18. 资源相关函数LoadIcon, LoadBitmap、LoadCursor  25:22
        19. Windows标准控件之静态文本  25:44
        20. Windows标准控件之美化静态文本  16:37
        21. Windows标准控件之编辑框  30:39
        22. Windows标准控件之美化编辑框控件  8:09
        23. Windows标准控件之列表框  24:27
        24. Windows标准控件之美化列表框  7:40
        25. Windows标准控件之组合框  23:44
        26. Windows标准控件之滚动条  30:21
        27. Windows标准控件之美化滚动条  5:53
        28. Windows控件之富文本编辑控件  56:13
        29. Windows公共控件简介  7:58
        30. Windows控件之动画  19:16
        31. Windows控件之测量条  27:53
        32. Windows控件之日期时间选择器  28:39
        33. Windows控件之热键控件  27:56
        34. Windows控件之链接控件  16:04
        35. Windows控件之日历控件  20:16
        36. Windows控件之进度条控件  17:30
        37. Windows控件之列表视图控件(上)  51:42
        38. Windows控件之列表视图控件(中)  7:51
        39. Windows控件之列表视图控件(下)  22:29
        40. Windows控件之树视图控件  46:04
        41. Windows控件之上下控件  19:56
        42. Windows控件之IP地址控件  13:11
        43. Windows控件之分页控件  19:42
        44. Windows控件之工具条控件  22:15
        45. Windows控件之提示控件  23:18
        46. Windows控件之状态栏控件  18:28
        47. Windows控件之控件条控件  26:32
        48. Windows控件学习小工具-控件间谍  13:56
        49. 控件操作GetDlgItem、SetDlgItemText等  28:03
        50. 窗口操作EnableWindow, FindWindow等  34:33
        51. 窗口子类化  26:45
        52. 窗口超类化  13:40
        53. WindowsGDI绘图简介  9:53
        54. Windows获取DC的三种方法  21:42
        55. Windows绘图API函数(上)  36:01
        56. Windows绘图API函数(下)  19:04
        57. 双缓冲绘制技术  24:50
        58. Windows绘制位图  20:53
        59. Windows创建菜单(上)  27:03
        60. Windows创建菜单(中)  23:21
        61. Windows创建菜单(下)  14:43
        62. Windows对话框简介  11:42
        63. 创建模态对话框  24:17
        64. 创建非模态对话框  9:39
        65. 创建对话框主窗口程序  22:22
        66. Win32课程总结及MFC课程预告  5:36
    大家可以点击【 查看详情】查看我的课程
    展开全文
  • Windows Shell 编程

    热门讨论 2010-11-18 23:41:53
    Windows Shell 编程 一个操作系统外壳的不错的定义是它是一个系统提供的用户界面,它允许用户执行公共的任务,如访问文件系统,导出执行程序,改变系统设置等。MS-DOS有一个Command.COM扮演着这个角色。然而Windows...
  • (例如,在 Windows7操作系统下的E盘有一个叫ForTheDream.txt 的文件,我们用鼠标双击这个文件时将启动记事本程序(notepad.exe)。此时系统会将E:\ForTheDream.txt作为命令行的参数传递给记事本程序的WinMain函数 ...

    游戏开发面面观


    游戏产业的分类——六大游戏市场


    AAA级游戏开发领域

    AAA级(游戏业界通常称其为“Triple-A”,即 3A)游戏是我们经常在评价一款游戏是否为大作的衡量标准,是游戏业界“酷”的代名词。

    通常指的是游戏平台像XBOX360/Play Station或者 PC上的游戏作品。

    通常团队规模50人以上,开发周期在2~5年之间,有着不菲的开发预算。

    是成熟的商业作品,通常都有着精美的画质,好莱坞电影风格的过场CG动画,能将艺术与技术进行完美的结合,是会让玩家玩上几分钟就瞬间爱上然后大呼过瘾的游戏大作。

    特质:

    • 高投入
    • 高品质
    • 高销量
    • 极少的BUG
    • 良好可上手性
    • 广阔市场前景
    • 经过完善的测试
    • 图形用户界面友好
    • 规模庞大的研发团队
    • 大规模市场宣传和炒作
    • 将艺术与技术完美结合
    • 高表现的视觉与听觉效果
    • 让玩家在玩上的最初5分钟入迷
    • 愉悦的体验连续、均衡、贯穿整个游戏过程

    社交和休闲游戏开发领域

    社交和休闲(Social and casual)类游戏与AAA级游戏相比,有着更小的开发团队(5 ~ 25人),更短的开发周期(4 ~ 8个月),更少的开发预算。

    主要依附着社交网络(国内如QQ空间、人人网、新浪微博,国外如 facebook,twitter)而存在。
    (老少咸宜的QQ农场就是一款在国内风靡一时的典型社交和休闲类游戏)

    移动游戏开发领域

    移动游戏市场包括普通移动手机,智能手机以及平板电脑。
    目前该平台由 Android、iOS 以及Windows Phone这三大智能移动平台主导。
    这个市场与社交和休闲类游戏市场有着很大的交集,与社交和休闲类游戏相比,有着更小的开发团队(甚至是个人),更少的预算以及更短的开发周期。

    功能型游戏开发领域

    功能性游戏(Serious game)是开发出来用于响应特定的企业或者机构的需求的游戏作品。

    (比如,国外一款名叫《Remission》的游戏,就是用于帮助孩子们理解什么是化疗以及化疗的作用和重要性的)
    (又比如,我国解放军开发的FPS大作《光荣使命》系列游戏,就是为我国的军队量身打造的,进行专门的高科技军事训练的一流游戏作品)

    学术型游戏开发领域

    学术型游戏开发领域是近年来新出现的游戏产业分支。

    (现在越来越多的机构开始资助大学或者研究所的游戏开发团队,促进了这种新生的游戏开发领域的发展)

    独立游戏开发领域

    独立型游戏开发领域是游戏产业的命脉所在,随着近年移动平台与社交平台的火热崛起,独立游戏开发者们的舞台越扩越宽。

    有着这样一群独立游戏开发者,他们视游戏开发为梦想,他们是独立游戏开发领域的主角。

    独立开发者是一个游戏背后的唯一创造力量和经济力量。
    没有外部的发行商为独立游戏提供资金,也没有其他的实体发挥对游戏内容的创造性控制。

    独立游戏大多是自己发行的,但多数独立开发者也愿意与发行商一同协作。发行商不提供开发资金或者控制游戏的开发过程。在这种情况下,独立开发者将首先开发游戏,仅当游戏开发完成时或者快要完成时才让发行商介入。同时,通常独立开发者工作室都非常小,常常仅有1~2人。


    游戏类型

    1. RPG = Role-playing Game :角色扮演游戏
      由玩家扮演游戏中的一个或数个角色,有完整的故事情节的游戏。
      玩家可能会与冒险类游戏混淆,其实区分很简单,RPG游戏更强调的是剧情发展和个人体验。
      一般来说,RPG可分为日式和美式两种,主要区别在于文化背景和战斗方式。日式RPG多采用回合制或半即时制战斗。

    2. ACT = Action Game :动作游戏
      玩家控制游戏人物用各种武器消灭敌人以过关的游戏,不追求故事情节。
      电脑上的动作游戏大多脱胎于早期的街机游戏和动作游戏如《魂斗罗》《三国志》《鬼泣》系列等。
      设计主旨是面向普通玩家,以纯粹的娱乐休闲为目的,一般有少部分简单的解谜成份,操作简单,易于上手,紧张刺激,属于“大众化”游戏。

    3. AVG = Adventure Game:冒险游戏
      由玩家控制游戏人物进行虚拟冒险的游戏。
      与RPG不同的是,AVG的特色是故事情节往往是以完成一个任务或解开某些迷题的形式出现的,而且在游戏过程中刻意强调谜题的重要性。
      AVG也可再细分为动作类和解迷类两种,动作类AVG可以包含一些格斗或射击成分。
      而解迷类AVG则纯粹依靠解谜拉动剧情的发展,难度系数较大。

    4. SLG = Simulation Game:策略游戏
      玩家运用策略与电脑或其他玩家较量,以取得各种形式胜利的游戏。(或统一全国,或开拓外星殖民地)
      策略游戏可分为回合制和即时制两种。
      后又被细分出模拟经营,于是就产生了SIM (simulation)类游戏。

    5. RTS = Real-Time Strategy Game:即时战略游戏
      本来属于策略游戏SLG的一个分支,但由于其在世界上的迅速风靡,使之慢慢发展成了一个单独的类型,知名度甚至超过了SLG,有点像现在国际足联和国际奥委会的关系。
      后来,从其上又衍生出了所谓“即时战术游戏”,多以控制一个小队完成任务的方式,突出战术的作用。

    6. FTG = Fighting Game:格斗游戏
      由玩家操纵各种角色与电脑或另一玩家所控制的角色进行格斗的游戏。
      按呈画技术可再分为2D和3D两种。
      此类游戏谈不上什么剧情,最多有个简单的场景设定,或背景展示,场景、人物、操控等也比较单一,但操作难度较大,主要依靠玩家迅速的判断和微操作取胜。

    7. STG = Shooting Game:射击类游戏
      这里所说的射击类,并非是模拟射击(枪战),而是指纯的飞机射击。
      由玩家控制各种飞行物(主要是飞机)完成任务或过关的游戏。
      此类游戏分为两种,一叫科幻飞行模拟游戏(Science-Simulation Game),以非现实的想象空间为内容。
      另一种叫真实飞行模拟游戏(Real- Simulation Game),以现实世界为基础,以真实性取胜,追求拟真,达到身临其境的感觉。

    8. FPS = First Personal Shooting Game:第一人称视角射击游戏
      严格来说它是属于动作游戏的一个分支,但和RTS一样,由于其在世界上的迅速风靡,使之展成了一个单独的类型。

    9. PZL = Puzzle Game:益智类游戏
      Puzzle的原意是指以前用来培养儿童智力的拼图游戏,引申为各类有趣的益智游戏,总的来说适合休闲。

    10. RCG ( RAC ) =Racing Game:竞速游戏
      在电脑上模拟各类赛车运动的游戏,通常是在比赛场景下进行。
      非常讲究图像音效技术,往往是代表电脑游戏的尖端技术。惊险刺激,真实感强,深受车迷喜爱。
      另一种说法称之为“Driving Game”。目前,RCG内涵越来越丰富,出现了另一些其他模式的竞速游戏,如赛艇、赛马等等。

    11. CAG = Card Game:卡片游戏
      玩家操纵角色通过卡片战斗模式来进行的游戏。
      丰富的卡片种类使得游戏富于多变化性,给玩家无限的乐趣。

    12. TAB = Table Game:桌面游戏
      顾名思义,是从以前的桌面游戏脱胎到电脑上的游戏。
      如各类强手棋(即掷骰子决定移动格数的游戏),经典的如《大富翁》系列。棋牌类游戏也属于TAB。

    13. MSC = Music Game:音乐游戏
      培养玩家音乐敏感性,增强音乐感知的游戏。
      伴随美妙的音乐,有的要求玩家翩翩起舞,有的要求玩家手指体操。

    14. SPG = Sports Game:体育类游戏
      模拟各种体育赛事的游戏。

    WINDOWS编程基础

    Visual Studio文件类型分析

    **ipch**文件夹和**HelloVisualStudio.sdf**文件:都是Visual Studio用来保存预编译的头文件和 Intellisense用的,删除这些文件对于工程的开发完全没有影响,是可以删除掉的。 隐藏步骤:【工具】→【选项】,【文本编辑器】→【C/C++】→【高级】,然后把【始终使用退回位置】和【退回位置已在使用时,不警告】这两者设为True。

    Debug文件夹,当中存放着编译过程中的中间文件,以及最后的目标文件,.exe型的执行文件( Debug 文件夹的出现对应着我们在选择解决方案时选择的是 Debug 型,如果我们解决方案类型为Release型,那么这时工程文件夹下就出现的不是 Debug文件夹,而是名为Release的文件夹)。

    工程文件夹(HelloVisualStudio文件夹),当中存放着我们工程相关的源文件,头文件以及若干和后缀名为.vcxproj的项目文件。这个文件夹的名称与工程名的名称一致,因为我们例子中的工程名为 HelloVisualStudio,所以这个工程文件夹名称就为HelloVisualStudio。

    扩展名为 .sIn 的文件,它记录着关于解决方案中的信息,我们打开一个解决方案,就是通过双击它。

    扩展名为 .suo 的文件,它记录着应用于该解决方案的用户的选项。

    扩展名为 .opensdf 的文件,记录着关于项目的状态信息。此文件只在项目处于打开状态时才会有。

    API

    微软公司为了方便我们开发基于Windows 的应用程序,为我们提供了各种各样的函数。这些函数是Windows操作系统提供给应用程序编程的接口,即Application Programming Interface,简称API。

    任何Windows应用程序与Windows本身之间的所有通信,都要使用Windows应用程序编程接口,也就是Windows API。
    这个接口说白了就是几百个函数组成的一个集合,它们是Windows操作系统提供的标准函数,可以提供应用程序与Windows互相进行通信的方法。

    因为Windows API是在C语言称王争霸叱咤风云的年代开发的,那时候C++还未发迹,所以我们可以发现,在Windows和应用程序之间传递数据的是结构体而不是类。

    SDK

    Software Development Kit,中文译为软件开发包。

    SDK说白了就是一个开发所需资源的一个集合
    所以 DirectX SDK 就是用 DirectX 进行开发的一个资源的打包集合。

    这里需要注意API和SDK都是IT业界广泛使用的术语,并不是专指某种特定的API或者SDK。

    WinMain

    原型:

    int WINAPI WinMain(
    	_In_ HINSTANCE hInstance, 
    	_In_ HINSTACNE hPrevInstance,
    	_In_ LPSTR lpCmdLine,
    	_In_ int nCmdShow
    );
    

    WINAPI 就是_stdcall,只是为了让我们清楚知道这里的_stdcall 表示的是一种调用约定,它让编译器知道了应当以Windows兼容的方式来产生机器指令。
    如果我们在写WinMain函数的时候去掉这句WINAPI 而直接写:
    int WinMain(),仍然是可以编译并运行的,只不过在编译期间会得到一条警告( warning)。

    这里的_In_可以理解为一个宏,表示需要我们进行自行输入(input)的一个参数。与其对应的是_Out_,之后我们也会经常在函数定义的代码中看到,它表示指定的这个参数是函数本身向外输出(Output)的一个参数。

    第一个参数,HINSTANCE类型的 hInstance,它表示该程序当前运行的实例句柄。
    我们可以对这个类型HINSTANCE进行字面上的理解,h前缀表示这个参数的类型为handle,句柄的意思,而后面的Instance中文意思是实例,将两个意思结合起来,所以这个类型就是实例句柄。
    hInstance其实就是一个数值。当一个程序在 Windows下运行时,它唯一对应一个运行中的实例。也只有运行中的程序实例,才有资格分配到实例句柄。
    一个应用程序可以运行多个实例每运行一个实例,系统都会给该实例分配一个句柄值,并且通过hInstance参数传递给程序的入口点WinMain函数。

    第二个参数,HINSTANCE类型的hPrevInstance,表示当前实例的前一个实例的句柄。
    我们可以对这个参数进行字面上的理解: h表示参数类型为句柄(handle) , Prev代表先前的(previous)意思,Instance依旧表示实例,那么组合起来就是先前的实例句柄。
    对于这个参数的用法,MSDN中明确表示在Win32环境下,该参数总是取 NULL,这就是说,在Win32环境下,这个参数没有存在感,不起任何作用,只是在进行WinMain函数书写时需要将它专门作为一个参数表示出来而已。

    第三个参数,LPSTR类型的lpCmdLine,它是一个以空终止的字符串
    指定传递给运用程序的命令行参数。
    参数肢解:lp前缀表示这个参数为一个指针,Cmd表示 command,命令的意思,与Line组合起来就表示命令行。
    (例如,在 Windows7操作系统下的E盘有一个叫ForTheDream.txt 的文件,我们用鼠标双击这个文件时将启动记事本程序(notepad.exe)。此时系统会将E:\ForTheDream.txt作为命令行的参数传递给记事本程序的WinMain函数
    记事本程序在得到这个文件的文件路径后,就会在窗口中正确显示这个文件的内容)

    第四个参数,int类型的nCmdShow,指定程序窗口应该如何显示,是最大化,最小化,还是隐藏等等。
    这个参数可有如下取值:
    在这里插入图片描述

    PlaySound

    函数定义:

    BOOL PlaySound(
    	LPCTSTR pszSound,
    	HMODULE hmod,
    	DWORO fdwSound
    );
    

    必须在编译之前连接winmm.lib库文件。

    第一个参数,LPCTSTR类型的pszSound,可以看到作为LPCTSTR类型的此参数为一个字符串,指定了要播放的声音文件。这个值设为NULL 的话,就会把所有当前播放的声音全部停掉。

    第二个参数,HMODULE类型的 hmod,包含了在第一个参数中指定的声音文件作为资源的可执行文件的句柄。之后会详细介绍各种资源,这里把这个参数设为NULL就可以了。

    第三个参数,DWORD类型的 fdwSound,是一个用来控制声音播放的一个标志。

    下面是一些常用标识的列表。
    (可以使用一个或者多个标识,标识之间用“|”连接)

    在这里插入图片描述

    工程中包含库文件的方式

    • #pragma comment(lib,“winmm.lib”),在""之间填需要链接的库文件,一般置于头文件include语句后。
    • 在工程配置中添加库文件的包含。
      菜单栏【项目】->【属性】,【配置属性】->【链接器】->【输入】,【附加依赖项】->【编辑】
      在这里插入图片描述

    Windows程序的“外貌”——窗口

    每个Windows应用程序至少有一个窗口,称之为主窗口。

    一个应用程序通常都包含 标题栏、菜单栏、系统菜单、最小化框最大化框,甚至滚动条。

    • 客户区:窗口的一部分,游戏软件通常都在客户区完成游戏中各种画面、功能与效果的实现。而应用程序则主要管理客户区的外观及其操作。
    • 非客户区:标题栏、菜单栏、系统菜单、最小化、最大化框。主要由Windows系统来管理。

    窗口创建四部曲

    设计

    Windows已经定义好了一个窗口所具有的所有基本属性。

    WNDCLASSEX结构体 定义:

    typedef struct tagWNDCLASSEX{
    	UINT cbSize;
    	UINT style;
    	WNDPROC lpfnWndProc;
    	int cbClsExtra;
    	int cbWndExtra;
    	HINSTANCE hInstance;
    	HICON hIcon;
    	HCURSOR hCursor;
    	HBRUSH hbrBackground;
    	LPCTSTR lpszMenuName;
    	LPCTSTR lpszClassName;
    	HICON hIconSm;
    } WNDCLASSEX, *PWNDCLASSEX;
    

    在WinMain函数中定义一个WNDCLASSEX:

    #include <Windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	//开始设计一个完整的窗口类
    	WNDCLASSEX wndClass = { 0 };	//用WINDCLASSEX定义了一个窗口类,即用wndClass实例化了WINDCLASSEX,用于之后窗口的各项初始化
    	wndClass.cbSize = sizeof(WNDCLASSEX);	//设置结构体的字节数大小
    	wndClass.style = CS_HREDRAW | CS_VREDRAW;	//设置窗口样式(此处定义窗口风格为水平重绘、垂直重绘)
    	wndClass.lpfnWndProc = WndProc;	//设置指向窗口过程函数的指针
    	wndClass.cbClsExtra = 0;	//表示窗口类附加内存
    	wndClass.cbWndExtra = 0;	//表示窗口的附加内存
    	wndClass.hInstance = hInstance;	//指定包含窗口过程的程序的实例句柄
    	wndClass.hIcon = (HICON)::LoadImage(NULL, _T("icon.ico"), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);	//用全局的::LoadImage函数从本地加载自定义ico图标
    	wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);	//指定窗口类的光标句柄
    	wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);	//为hbrBackground成员指定一个灰色画刷句柄
    	wndClass.lpszMenuName = NULL;	//用一个以空终止的字符串,指定菜单资源的名字
    	wndClass.lpszClassName = _T("ForTheDreamOfGameDevelop");	//用一个以空终止的字符串,指定窗口类的名字
    	
    	return 0;
    }
    

    第二个参数:
    常用样式取值:
    在这里插入图片描述
    第三个参数:
    窗口过程函数是一个回调函数(不是由该函数的实现方直接调用的,而是在特定事件或条件发生时由另一方调用的,用于对该事件或条件进行响应)。

    针对Windows的消息处理机制,窗口过程函数被调用过程如下:
    1.在设计窗口类时,将窗口过程函数的地址赋值给lpfnWndProc成员变量
    2.调用ResgisterClass(&wndclass)注册窗口类,那么系统就有了我们所编写的窗口过程函数的地址
    3.当应用程序接收到某一窗口消息时,调用DispatchMessage(&msg)将消息回传给系统,系统则利用先前注册窗口类时得到的函数指针,调用窗口过程函数对消息进行处理

    注册
    创建
    显示与更新

    Windows资源的“身份证”——句柄

    在Windows应用程序中,窗口都是通过窗口句柄(HWND)来标识的。我们要对某个窗口进行操作的话,首先就是要得到这个窗口的句柄。

    句柄(HANDLE)
    在Windows程序中,有各种各样的资源,比如窗口、图标、光标等。系统创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,这些标识号就是句柄。
    一款优质的游戏一般都会有着个性化的图标与鼠标光标,而为了在我们自己开发的游戏中使用这样个性化的图标与光标资源,我们就会与图标句柄(HICON)和光标句柄(HCURSOR)打交道。

    Windows程序的“邮局”——消息与消息队列

    Windows程序设计是一种基于事件驱动方式的程序设计模式,Windows程序与操作系统间的通信主要是基于消息的。

    每单击一次鼠标或按键,操作系统就会感知事件,将事件包装成消息,投递到消息队列中,然后程序从消息队列中取出消息并响应。
    在这个处理过程中,操作系统也会给游戏程序“发送消息”,即操作系统调用程序代码中专门负责处理消息的“窗口过程函数”。

    Windows程序运行的机制:Windows将产生的消息依次放到消息队列中,而应用程序则通过一个消息循环不断地从消息队列中取出消息并进行响应。

    消息的表现形式——MSG结构体

    定义:

    typedef struct tagMSG{	//msg
    	HWND hwnd;	//指定消息所属窗口
    	UINT message;	//指定消息的标识符
    	WPARAM wParam;	//指定此msg的附加信息
    	LPARAM lParam;	//指定此msg的附加信息
    	DWORD time;	//指定投递到消息队列的时间
    	POINT pt;	//指定投递到消息队列中时鼠标的当前位置
    } MSG;
    

    第一个参数:通常一个消息都是与某个窗口相关联的。(例在某个活动窗口按下鼠标左键,产生的按键消息就是发给这个窗口的)

    第二个参数:在Windows中,消息由一个数值来表示,不同消息对应着不同数值。由于数值记忆不方便,所以Windows将消息对应的数值定义为WM_XXX宏的形式。(其中WM是Windows Message的缩写,XXX对应某种消息的英文拼写的大写形式)

    展开全文
  • windows 编程入门资料

    千次阅读 2018-05-30 13:48:03
    《高级WINDOWS程序设计》中看到作者提到CreateFile()可以操作很多设备。 资料2 &amp;lt;&amp;lt;Windows高级编程指南&amp;gt;&amp;gt; 《Windows高级编程指南》是1999年清华大学出版社出版的...
  • Windows USB 编程总结

    千次阅读 2018-09-28 12:18:50
    ###Windows USB 编程总结 GUID #include &amp;amp;amp;amp;amp;amp;amp;amp;lt;initguid.h&amp;amp;amp;amp;amp;amp;amp;amp;gt; // For DEFINE_GUID // Device Interface GUID. DEFINE_GUID(GUID_...
  • Windows shell 扩展编程教程详解

    千次阅读 2017-08-05 17:56:58
    所谓的Shell扩展就是能够添加某种功能到Windows Shell的COM对象。Windows里有着各种各样的扩展,但关于Shell扩展的原理以及如何编写Shell扩展的文档却很少。...不过这些是英文的书籍,当然你可以参照词典进行阅读。
  • Windows编程特点

    千次阅读 2014-06-24 23:20:35
    这不同于一个C++控制台应用程序,可以将整个程序包含在main函数中。当然,他们的区别还远不止这些。一个Windows应用程序还具有以下的特性。  事件驱动程序设计 消息循环与输入 图形输出 用户界面对象 ...
  • Windows7 API 编程资源 含有代码和帮助文档
  • 1. Windows 编程基础:开发环境和开发过程。 2. Windows事件驱动模型和消息机制。 3. Windows的资源:图标、光标、菜单、位图等。 4. Windows绘图:图形和文字的显示。 5. 对话框和控件。 6. 静态库和动态库。 ...
  • 贪吃蛇详解Windows编程(一)

    千次阅读 2015-12-27 14:23:48
    贪吃蛇可以用很多种语言写,但是基本的思路都是一样的,在这里我就用C/C++写,但不是纯C或者纯C++写,因为那样太没效率了,用Windows封装的API写会节省很多代码而且是有界面的。既然是详解,所以一篇文章肯定讲不完...
  • 什么是Windows内核编程

    千次阅读 2018-11-09 02:54:38
    什么是Windows内核编程
  • python编程windows平台)

    千次阅读 2018-06-10 13:06:58
    而在windows上面,一般需要自己手动安装python。版本的话,可以根据自己的需要选择python2.7或者python3.*版本。按照我个人的想法,可能2.7更加符合我的需求。如果稍微花一点时间的话,你会发现...
  • Windows下串口通信编程详解

    千次阅读 2020-09-11 15:29:47
    Windows API串口编程详解 文章目录 (一)Windows API串口通信编程概述 (二)Windows串口通信相关API函数 2.1打开和关闭串口 1.打开串口 CreateFile()函数声明如下: 2.关闭串口 CloseHandle函数声明如下: 2.2...
  • 视频教程-windows核心编程-C/C++

    千次阅读 2020-05-28 10:24:00
    windows核心编程 从事编程数年,曾留学日本深造,擅长C++、后端、尤其...
  • Windows7下搭建Qt 64bit编程环境

    万次阅读 2017-10-27 22:14:51
    Windows7 下 Qt-64bit开发环境搭建遇到的坑 前段时间简单地玩过Qt,当时听说MinGW的安装版本比较简单,就下载了一个装上就直接用了,也没什么配置,挺方便的。 但是网上MinGW的安装包都是32bit的,如果想要开发...
  • windows 游戏编程大师技巧(第二版)学习之路-1

    千次阅读 热门讨论 2018-05-06 10:03:23
    首先说明一点,我有这个《windows 游戏编程大师技巧(第二版)》中文 pdf 资源,需要同学可以找我要。我也会上传到 csdn 资源上去,不过估计要积分,所以没积分的同学可以找我要,完全免费喲! Windows游戏编程大师...
  • 这篇文章将带着大家来学习《Windows黑客编程技术详解》,其作者是甘迪文老师,推荐大家购买来学习。作者将采用实际编程和图文结合的方式进行分享,并且会进一步补充相关知识点。第六篇文章主要介绍木马病毒提权技术...
  • 浅谈 Windows API 编程

    千次阅读 多人点赞 2019-03-07 11:30:53
    原文地址:... ... WinSDK 是编程中的传统难点,曾经听有一个技术不是很好的朋友乱说什么给你 API 谁都会用,其实并非那么简单,个人写的WinAPI 程序也不少了,其...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 319,967
精华内容 127,986
关键字:

windows7可以编程吗