Winapi 如何将标题栏字符串作为函数参数传递给CreateWindow win32 api
我知道我需要使用:L“我的标题”作为win32 api CreateWindow中的第二个参数。Winapi 如何将标题栏字符串作为函数参数传递给CreateWindow win32 api,winapi,Winapi,我知道我需要使用:L“我的标题”作为win32 api CreateWindow中的第二个参数。 但我想让这个参数成为动态的,并从函数中获取它的字符串。 例如,标题栏始终使用中文字体 GLboolean esUtil_win32::WinCreate ( ESContext *esContext, const char *title ) { ... ... esContext->hWnd = CreateWindow( L"open
但我想让这个参数成为动态的,并从函数中获取它的字符串。 例如,标题栏始终使用中文字体
GLboolean esUtil_win32::WinCreate ( ESContext *esContext, const char *title )
{
...
...
esContext->hWnd = CreateWindow(
L"opengles2.0",
(LPCTSTR)title,
wStyle,
0,
0,
windowRect.right - windowRect.left,
windowRect.bottom - windowRect.top,
NULL,
NULL,
hInstance,
NULL);
}
基本上,问题在于
title
是一个ANSI(或多字节)字符串,CreateWindowW
函数需要Unicode字符串。有三种方法可以解决此问题:
WinCreate
函数的定义,改为使用const wchar\u t*title
参数。这可能会对代码中的其他地方产生影响,尽管如果传递给此函数的字符串始终是字符串文字,那么只需在它们前面加上L
,就可以使它们变宽CreateWindow
调用更改为CreateWindowA
,以显式调用函数的ANSI版本。这将允许您将title
传递给函数而无需转换。如果执行此操作,则需要从L“opengles2.0”
中删除L
标题
字符串转换为Unicode,然后再将其传递给函数。您可以使用类似于以下内容的代码执行此操作:
wchar_t wchTitle[256]; // pick a sensible maximum
MultiByteToWideChar(CP_ACP, 0, title, -1, wchTitle, 256);
然后将wchTitle
传递到CreateWindow
函数,而不是title
。如果title
采用其他编码方式(如UTF-8),则应适当更改CP\u ACP
值Windows使用UTF-16字符编码,但您正在传递带有其他编码的字符串(
title
)。要使用此字符串,首先需要将其转换为UTF-16。调用以将源编码转换为UTF-16