zoukankan      html  css  js  c++  java
  • 用C写最简单的Windows窗口程序——WINAPI HelloWorld

    代码非常简单:

     1 #include <windows.h>
     2 #include <tchar.h>
     3 
     4 
     5 
     6 int WINAPI _tWinMain(HINSTANCE hInstance,
     7     HINSTANCE hPrevInstance,
     8     LPTSTR lpCmdLine,
     9     int nCmdShow)
    10 
    11 {
    12 
    13     MessageBox(NULL, _T("Goodbye, cruel world!"), _T("Note"), MB_OK);
    14 
    15     return 0;
    16 
    17 }

    要使用WinAPI的话,肯定是要引入windows.h的。

    tchar.h涉及了一个windows下的编码的问题,使用tchar而不是char或者wchar可以在编译时通过是否定义_UNICODE标记控制程序的编码是采用MBCS编码、ANSI编码还是采用Unicode编码。

    再看WinMain函数,该函数相当于普通C程序中的main函数,也是所有Windows程序的入口点。

    WINAPI是一个宏定义,替换后就是__stdcall。该声明指定了函数的调用方式为pascal程序的缺省调用方式。C/C++默认是采用__cdecl的。

    WinMain在MSDN文档中有详细的说明。

    HINSTANCE是句柄的意思,表示该变量是由操作系统管理(分配、销毁)的,用户只能持有该变量的句柄,通过系统调用操作该变量。

    hInstance是该窗口程序的句柄。

    hPrevInstance永远都是NULL。

    LPTSTR是tchar *的宏定义。

    lpCmdLine是一个字符串数组,里面的内容是启动程序的完整命令行(不包括程序名,有点像原来main函数中的argv不包括argv[0])。

    nCmdShow指示这个程序的显示方式。

    MessageBox函数启动一个弹出式窗口,标题是Note,内容是Goodbye, cruel world!,只有一个OK按钮。

    下面说一下这个程序的编译。

    如果是用的Visual Studio的话,建立一个Win32项目,选中空项目,然后添加一个源代码,把上面的代码粘贴进去就行了。

    如果使用cl手动编译的话,可以使用以下命令:cl.exe hello.c /lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
    如果在linux下使用mingw交叉编译的话,可以使用以下命令:i586-mingw32msvc-gcc hello.c -mwindows

  • 相关阅读:
    BZOJ 3997: [TJOI2015]组合数学 [偏序关系 DP]
    [Sdoi2017]新生舞会 [01分数规划 二分图最大权匹配]
    [Sdoi2017]相关分析 [线段树]
    [Sdoi2017]硬币游戏 [高斯消元 KMP]
    [Sdoi2017]序列计数 [矩阵快速幂]
    [Sdoi2017]树点涂色 [lct 线段树]
    [Sdoi2017]数字表格 [莫比乌斯反演]
    BZOJ 3160: 万径人踪灭 [fft manacher]
    Rabbitmq常见测试
    MQ(消息队列)功能介绍
  • 原文地址:https://www.cnblogs.com/HCOONa/p/1630791.html
Copyright © 2011-2022 走看看