C++ 是否使用WNDCLASSEX创建窗口?[Cpp]

C++ 是否使用WNDCLASSEX创建窗口?[Cpp],c++,windows,callback,C++,Windows,Callback,首先这是我的代码。。。事实上,它几乎是从微软教程中复制和粘贴的,我正试图从中学习 CreateWindow.h #ifndef CreateWindow_H #define CreateWindow_H #include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> using namespace std; int WINAPI WinMain(H

首先这是我的代码。。。事实上,它几乎是从微软教程中复制和粘贴的,我正试图从中学习

CreateWindow.h

#ifndef CreateWindow_H
#define CreateWindow_H

#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>

using namespace std;

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

#endif
我原以为我需要做一个静态演员,但什么都没用。我甚至试着用WORD,但还是出错了。所以我不知道在那里该做什么

还有我怎么用这个?整个教程我读了好几遍

教程:

我以为你会这样做

// start up the four variables before hand, how ever that is done
WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
我真的没有取得任何进展

别误会我的意思。。。我了解很多,但我不了解的事情我会继续,并在下面列出

  • _T/TCHAR
  • 回拨
  • 如何启动应用程序以供实际使用
  • 修复用于强制转换的编译器错误

    • 我将依次回答您的每一个问题:

      • _T是一个宏,在定义UNICODE和未定义UNICODE时计算为L。您可以在字符串文字周围使用此宏,以便在定义UNICODE时使用宽文字(例如,L“foo”),在未定义时使用“窄”文字(例如,“foo”)。同样,TCHAR在定义UNICODE时是一个typedef到wchar_t,在未定义时是一个typedef到char。有关Windows应用程序全球化的更多信息,请参见

      • 回调是一个计算结果为u stdcall的定义。这是一个特定于Microsoft的扩展,它将函数从默认cdecl调用约定修改为stdcall。有关调用约定的更多信息,请参见

      • WinMain是非控制台Windows应用程序的入口点。从技术上讲,C运行时(CRT)定义了操作系统调用的实际入口点,这反过来又调用了WinMain。与main()一样,不应在代码中直接调用它

      • LoadIcon将LPCTSTR(wchar_t const*或char const*取决于UNICODE)作为第二个参数。MAKEINTRESOURCE宏将对LPTSTR执行适当的强制转换,因此您不应该将其强制转换为单词事实上,您根本不应该在这里使用MAKEINTRESOURCE宏,因为IDI_应用程序应该已经是一个define to MAKEINTRESOURCE()。只需
        加载图标(hInstance,IDI_应用程序)
        即可


        • 我将依次回答您的每一个问题:

          • _T是一个宏,在定义UNICODE和未定义UNICODE时计算为L。您可以在字符串文字周围使用此宏,以便在定义UNICODE时使用宽文字(例如,L“foo”),在未定义时使用“窄”文字(例如,“foo”)。同样,TCHAR在定义UNICODE时是一个typedef到wchar_t,在未定义时是一个typedef到char。有关Windows应用程序全球化的更多信息,请参见

          • 回调是一个计算结果为u stdcall的定义。这是一个特定于Microsoft的扩展,它将函数从默认cdecl调用约定修改为stdcall。有关调用约定的更多信息,请参见

          • WinMain是非控制台Windows应用程序的入口点。从技术上讲,C运行时(CRT)定义了操作系统调用的实际入口点,这反过来又调用了WinMain。与main()一样,不应在代码中直接调用它

          • LoadIcon将LPCTSTR(wchar_t const*或char const*取决于UNICODE)作为第二个参数。MAKEINTRESOURCE宏将对LPTSTR执行适当的强制转换,因此您不应该将其强制转换为单词事实上,您根本不应该在这里使用MAKEINTRESOURCE宏,因为IDI_应用程序应该已经是一个define to MAKEINTRESOURCE()。只需
            加载图标(hInstance,IDI_应用程序)
            即可


            • 你会发现不处理T、TCHAR和TCHAR.h非常有帮助。这些都是过去的遗物,当时你可能不得不让你的代码同时在Windows95/98和NT上运行。我想这不是你的问题。只要把一切都统一起来,你就不会后悔了。这意味着所有字符串文本都需要加上前缀“L”。例如

              L"Win32 Guided Tour"
              
              现在,请执行以下操作:

              将以下两行添加到源文件的最顶端(在所有包含之前)

              (或者更好的方法是,只需确保在项目设置中设置了UNICODE和_UNICODE。这是Visual Studio中的默认设置-因此,如果您运行的是VS2008或VS2010,则只需跳过所有设置)


              现在,去掉LoadIcon调用中的静态\u转换。您的代码将编译(并有望运行)正常。

              您会发现不处理\u T、TCHAR和TCHAR.h非常有用。这些都是过去的遗物,当时你可能不得不让你的代码同时在Windows95/98和NT上运行。我想这不是你的问题。只要把一切都统一起来,你就不会后悔了。这意味着所有字符串文本都需要加上前缀“L”。例如

              L"Win32 Guided Tour"
              
              现在,请执行以下操作:

              将以下两行添加到源文件的最顶端(在所有包含之前)

              (或者更好的方法是,只需确保在项目设置中设置了UNICODE和_UNICODE。这是Visual Studio中的默认设置-因此,如果您运行的是VS2008或VS2010,则只需跳过所有设置)


              现在,去掉LoadIcon调用中的静态\u转换。您的代码将编译(并有望运行)正常。

              您所说的“使用此”是什么意思?除win32应用程序外,WinMain()与main()相同。你在节目里不叫它,它是节目。@quasiverse哈哈,我不知道。。。每天学习新的东西。。。现在我想知道我遇到了麻烦,但我仍然有编译错误…你得到的错误似乎与代码块有关。它在MSVC++上工作,但我也能够通过删除MAKEINTRESOURCE()在代码块中修复它。请注意,您还没有
              L"Win32 Guided Tour"
              
              #ifndef UNICODE
              #define UNICODE
              #endif
              
              #ifndef _UNICODE
              #define _UNICODE
              #endif