C++ 是否使用WNDCLASSEX创建窗口?[Cpp]
首先这是我的代码。。。事实上,它几乎是从微软教程中复制和粘贴的,我正试图从中学习 CreateWindow.hC++ 是否使用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
#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