Winapi 如何将标题栏字符串作为函数参数传递给CreateWindow win32 api

Winapi 如何将标题栏字符串作为函数参数传递给CreateWindow win32 api,winapi,Winapi,我知道我需要使用:L“我的标题”作为win32 api CreateWindow中的第二个参数。 但我想让这个参数成为动态的,并从函数中获取它的字符串。 例如,标题栏始终使用中文字体 GLboolean esUtil_win32::WinCreate ( ESContext *esContext, const char *title ) { ... ... esContext->hWnd = CreateWindow( L"open

我知道我需要使用:L“我的标题”作为win32 api CreateWindow中的第二个参数。
但我想让这个参数成为动态的,并从函数中获取它的字符串。 例如,标题栏始终使用中文字体

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