c++ - 从头开始创建 C++ 后台 Win32 应用程序

标签 c++ winapi visual-c++

我想创建一个非常简单的后台应用程序。 我从空的 c++ 项目开始,并使用以下代码创建一个 source.cpp 文件:

#include "Windows.h"

int WINAPI _tWinMain(HINSTANCE  hInstance,
    HINSTANCE   hPrevInstance,
    LPTSTR      lpCmdLine,
    int     nCmdShow)
{
    MSG Msg;

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

    }

    return 0;
}

然后我将项目的设置设置如下:

属性 -> 配置属性 -> 链接器 -> 系统:设置子系统为:Windows (/SUBSYSTEM:WINDOWS)

属性 -> 配置属性 -> 链接器 -> 高级 -> 设置入口点为:_tWinMain

我做的对吗?另外我想把MFC库添加到这个项目中,这样我就可以使用MFC的功能,我该怎么做?

感谢阅读:)

编辑: 奇怪,我只需要包含“tchar.h”,错误 [LNK1561:必须定义入口点] 就会消失。我不再需要配置项目设置。我只需要下面的代码:

#include "Windows.h"
#include "tchar.h"

int WINAPI _tWinMain(HINSTANCE  hInstance,
    HINSTANCE   hPrevInstance,
    LPTSTR      lpCmdLine,
    int     nCmdShow)
{
    //MessageBox(0, _T("test"), _T("Test"), 0);

    return 0;
}

最佳答案

在不使用文档和 View 的情况下创建 SDI 应用程序。仅检查您需要的选项。在大多数情况下,即使是后台应用程序也需要一个窗口来获取窗口消息。

离开创建的主窗口不显示它,设置m_nCmdShow 为SW_HIDE。销毁这个主窗口将结束消息循环并停止程序。

稍后您可能会从主机中删除其他未使用的东西,例如工具栏。

另一种方法是使用向导创建基于对话框的应用程序。无需创建任何对话框并使用您自己的消息泵。像这样:

while (OuterCondition()) 
{
  while( ::PeekMessage( &message, NULL , WM_MIN, WM_MAX, PM_NOREMOVE ) )
  {
    ::AfxPumpMessage();
  }
}

MsgWaitForMultipleObjects 也可能有用。

您通常需要一个 CWinApp 对象来正确初始化 MFC。

关于c++ - 从头开始创建 C++ 后台 Win32 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41405096/

相关文章:

c++ - 在屏幕上创建计时器的最佳方式

c++ - 基于对话框的 MFC 应用程序的应用程序范围的周期性任务

c++ - 在 COM C++ 中将日期转换为字符串

c++ - 通过 Qt C++ 中的键访问解析的嵌套 JSON

C++ 函数返回指针不会造成段错误

c++ - 如何缩放和旋转正方形以适合用户输入角度的正方形?

c++ - ndgrid matlab函数的工作原理

c++ - 如何使用动画将 3ds max 模型导入 C++/Open GL

c++ - 在C++中填充一个椭圆

node.js - 为什么 node-gyp(和其他东西)需要 Visual Studio?