飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5730|回复: 7

Windows API一日一练 第一个应用程序

[复制链接]
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-5-23 22:16:34 | 显示全部楼层 |阅读模式
    本帖最后由 whypro 于 2010-5-24 06:29 编辑

    要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看
    到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把
    结果显示给我们。现在就来编写一个最简单的 Windows 应用程序,让它提示一行文字给我
    们看到,这就是简单的目标。
    它实现的源程序和界面如下:
    Snap4.gif
    上面这个图,是从 VC++ 2005 里截出来的。这样可以看到源程序和显示的界面,很清楚
    地知道那些内容在那里显示,显示窗口里的标题是例子,就是 MessageBox 里的字符串“例
    子”的显示。“第一个应用程序”也是那样显示出来的。第一个应用程序是非常简单的,下
    面再来详细地解说每行程序的作用。
    源程序如下:
    #001  // First.cpp : 应用程序入口文件
    #002  //
    #003   
    #004  #include "stdafx.h"
    #005  #include "First.h"
    #006   
    #007  //
    #008  //第一个例子。
    #009  //
    #010  //
    #011  int APIENTRY _tWinMain(HINSTANCE hInstance,
    #012                       HINSTANCE hPrevInstance,
    #013                       LPTSTR    lpCmdLine,  
    #014                       int       nCmdShow)
    #015  {
    #016    UNREFERENCED_PARAMETER(hPrevInstance);
    #017    UNREFERENCED_PARAMETER(lpCmdLine);
    #018    UNREFERENCED_PARAMETER(hInstance);
    #019    UNREFERENCED_PARAMETER(nCmdShow);
    #020   
    #021    //获取桌面的句柄。
    #022    HWND hWnd = GetDesktopWindow();
    #023   
    #024    //显示一行消息。
    #025    ::MessageBox(hWnd, _T("第一个应用程序"), _T("例子"), MB_OK);   
    #026   
    #027    //
    #028    return 0;
    #029  }
    第 4 行是包含Windows 的 API头文件。在这个文件里包含一些系统的定义等。
    第 5 行是包行 C 的头文件。
    第 11 行是定义WinMain 的入口。
    第 16 行到第 19 行是指明不生产这些参数不使用的警告。
    第 22 行是获取桌面的句柄。
    第 25 行是显示一个窗口提示信息。
    第 28 行是返回程序出错码。
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2010-5-23 22:36:10 | 显示全部楼层

    main winmain _tmain _twinmain 主函数及别名详解

    1) main是c/c++的标准入口函数名
    2) winmain是windows api窗体程序的入口函数(int winapi winmain()中winapi是__stdcall的宏 在windows.h中定义)
    3) _tmain _twinmain是unicode版本函数别名 为了编译时能自动转换字符串编码

    1.main是C程序的函数,_tmain是main为了支持unicode所使用的main的別名
    2._tmain的定义在<tchar.h>可以找到,如#define _tmain main,所以要加#include <tchar.h>才能用。 _tmain()是个宏,如果是UNICODE则他是wmain()否则他是main()

    3.因此_tmain compile后仍为main,所以都可以执行

    1) main()是WINDOWS的控制台程序(32BIT)或DOS程序(16BIT),
    2) WinMain()是WINDOWS的GUI程序,
    wmain()是UNICODE版本的main(),
    3)_tmain()是个宏,如果是UNICODE则他是wmain()否则他是main()
    外,wmain也是main的另一個别名,是为了支持二个字节的语言环境
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2010-5-23 22:38:51 | 显示全部楼层

    MessageBox的常见用法

    一    函数原型及参数
     function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;
     hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
     Text:欲显示的信息字符串。
     Caption:对话框标题字符串。
     Type:对话框类型常量。
     该函数的返回值为整数,用于对话框按钮的识别。
     2、类型常量
     对话框的类型常量可由按钮组合、缺省按钮、显示图标、运行模式四种常量组合而成。
     (1)按钮组合常量
     MB_OK = $00000000;         //一个确定按钮
     MB_OKCANCEL = $00000001;      //一个确定按钮,一个取消按钮
     MB_ABORTRETRYIGNORE = $00000002;  //一个异常终止按钮,一个重试按钮,一个忽略按钮
     MB_YESNOCANCEL = $00000003;     //一个是按钮,一个否按钮,一个取消按钮
     MB_YESNO = $00000004;        //一个是按钮,一个否按钮
     MB_RETRYCANCEL = $00000005;     //一个重试按钮,一个取消按钮
     (2)缺省按钮常量
     MB_DEFBUTTON1 = $00000000;     //第一个按钮为缺省按钮
     MB_DEFBUTTON2 = $00000100;     //第二个按钮为缺省按钮
     MB_DEFBUTTON3 = $00000200;     //第三个按钮为缺省按钮
     MB_DEFBUTTON4 = $00000300;     //第四个按钮为缺省按钮
     (3)图标常量
     MB_ICONHAND = $00000010;        //“×”号图标
     MB_ICONQUESTION = $00000020;      //“?”号图标
     MB_ICONEXCLAMATION = $00000030;    //“!”号图标
     MB_ICONASTERISK = $00000040;      //“i”图标
     MB_USERICON = $00000080;        //用户图标
     MB_ICONWARNING = MB_ICONEXCLAMATION;  //“!”号图标
     MB_ICONERROR = MB_ICONHAND;      //“×”号图标
     MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标
     MB_ICONSTOP = MB_ICONHAND;       //“×”号图标
     (4)运行模式常量
     MB_APPLMODAL = $00000000;    //应用程序模式,在未结束对话框前也能切换到另一应用程序
     MB_SYSTEMMODAL = $00001000;   //系统模式,必须结束对话框后,才能做其他操作
     MB_TASKMODAL = $00002000;    //任务模式,在未结束对话框前也能切换到另一应用程序
     MB_HELP = $00004000;       //Help Button
     3、函数返回值
     0            //对话框建立失败
     IDOK = 1        //按确定按钮
     IDCANCEL = 2      //按取消按钮
     IDABOUT = 3       //按异常终止按钮
     IDRETRY = 4       //按重试按钮
     IDIGNORE = 5      //按忽略按钮
     IDYES = 6        //按是按钮
     IDNO = 7        //按否按钮
    二    用法
    1.    MessageBox("这是一个最简单的消息框!");
    2.    MessageBox("这是一个有标题的消息框!","标题");
    3.    MessageBox("这是一个确定 取消的消息框!","标题", MB_OKCANCEL );
    4.    MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMATION );
    5.    MessageBox("这是一个两种属性的消息框!","标题",
                  MB_ICONEXCLAMATION|MB_OKCANCEL );
    6.    if(MessageBox("一种常用的应用","标题
                  " ,MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL)
            return;
    注意:
    以上消息框的用法是在CWnd的子类中的应用,如果不是,则要MessageBox(NULL,"ddd","ddd",MB_OK); 或MessageBox(hWnd,"ddd","ddd",MB_OK); hWnd为某窗口的句柄,或者直接用AfxMessageBox。
    二、在MessageBox中显示变量的值
          CString string;
          string.format("%d%s",m_age, m_address); //将变量组装到字符串中
           MessageBox(string,"消息框标题",消息框类型);
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2017-4-20 22:12
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-5-26 21:30:14 | 显示全部楼层
    /:001,等我把那个Delphi基础搞完了,我就把你的这个系列,全部用Delphi说一遍!
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2010-5-26 21:37:04 | 显示全部楼层
    太好了,我给你加油!
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2019-2-20 15:52
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-5-27 10:38:15 | 显示全部楼层
    呵呵 讲的蛮详细的
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-3-3 18:58
  • 签到天数: 68 天

    [LV.6]常住居民II

    发表于 2010-5-28 22:41:49 | 显示全部楼层
    顶起·~~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-5-29 21:10:27 | 显示全部楼层
    顶起,~~~~~~
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表