给定一条消息:
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"旧单词"但我需要一些东西,将DWORD或char*类型的变量转换为LPCWSTR。
使用TCHAR
而不是char
:
TCHAR appStrt[] = _T("Application has already been started in a different window.");
至于第二个问题,您可能需要检查CreateWindowEx
的引用,因为在样式之前的调用中缺少一个参数。
没有简单的转换,只需首先从正确的东西开始
TCHAR *appStrt = _T("Application has already been started in a different window.");
对于第二个示例,您的参数顺序错误。对于CreateWindowEx,第三个参数是窗口标题,第四个参数是窗样式。您已经将窗口样式放在了窗口标题应该放的位置。
一般来说,不要把编译器错误消息看得过于字面。如果编译器说不能将xxx转换为yyy,则并不总是意味着您确实需要将xxx转换成yyy。这两个例子都说明了这一点。
您可以使用MessageBoxA()
,这样就不必转换char*
数据(如果数据是在运行时动态分配的,而不是像您的示例中那样静态分配,则特别有用-否则,请使用MultiByteToWideChar()
,然后调用MessageBoxW()
)。
至于CreateWindowEx()
,您在lpWindowName
参数而不是dwStyle
参数中传递窗口样式值,这就是编译器抱怨LPCWSTR
的原因。