给出一条消息:
char *appStrt = "Application has already been started in a different window.";
我试图在以下功能中使用它:
MessageBox(NULL, appStrt, // (LPCTSTR) appStrt cast doesn't work here
appRun,
MB_ICONWARNING | MB_OK);
如何将appStrt转换为LPCSTR,以便MessageBox不会抱怨? 我在下面的代码中遇到了同样的问题:
DWORD dwStyle;
m_hWnd = CreateWindowEx(dwStyleEx,
m_pszClassName,
dwStyle | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, // complains here about dwStyle
0,
etc.
CreateWindowEx也抛出一个错误,指出dwStyle的类型应为LPCWSTR。 我在网上搜索但只发现了以下转换: LPCWSTR newWord = L“OldWord” 但是我需要能够将DWORD或char *类型的变量转换为LPCWSTR的东西。
答案 0 :(得分:2)
使用TCHAR
代替char
:
TCHAR appStrt[] = _T("Application has already been started in a different window.");
至于你的第二个问题,你可能想检查a reference of CreateWindowEx
,因为你在样式前的调用中缺少一个参数。
答案 1 :(得分:2)
没有简单的转换,只是从一开始就做正确的事情
TCHAR *appStrt = _T("Application has already been started in a different window.");
对于第二个示例,您的参数输入顺序错误。对于CreateWindowEx,第三个参数是窗口标题,第四个参数是窗口样式。你已经把窗口样式放在了窗口标题的位置。
作为一般原则,不要过于字面地使用编译器错误消息。如果编译器说不能将xxx转换为yyy,那么总是意味着你需要将xxx转换为yyy。这两个例子都说明了这一点。
答案 2 :(得分:0)
您可以使用MessageBoxA()
代替,然后您不必转换char*
数据(如果数据是在运行时动态分配而不是像您的示例中那样静态分配,则非常有用 - 否则,请使用{ {1}}然后拨打MultiByteToWideChar()
)。
对于MessageBoxW()
,您将在CreateWindowEx()
参数而不是lpWindowName
参数中传递窗口样式值,这就是编译器抱怨dwStyle
的原因。