簡體   English   中英

在 C++ 中將 LPCSTR 轉換為 LPCWSTR,ATL 不可用

[英]Converting LPCSTR to LPCWSTR in C++, ATL not available

在我開始之前,

請理解這個問題不是重復的 有相同標題的問題:

將 LPCSTR 轉換為 LPCWSTR

但是,在問這個問題之前我做了一些研究,並遇到了ATLActive Template Library

但是,我使用的編譯器沒有ATL ,這不允許我從LPCSTR轉換為LPCWSTR

另外,要理解為什么我需要轉換這兩種數據類型,原因是我正在處理一個項目,它實際上是一個控制台游戲引擎。

如果您不知道,要重命名控制台窗口,您需要使用SetConsoleTitle(LPCWSTR winName)

起初,我使用LPCWSTR數據類型作為我函數的參數。 但是,當我嘗試另一個函數(實際上是繪圖函數)時,會發生以下情況:

控制台窗口的屏幕截圖

您在此處看到的這種UNICODE字符組合是用於在控制台上繪制矩形的函數。 矩形正確顯示,但是,有一些文本,或者我應該說,控制台標題本身,顯示在矩形上。

我沒有添加任何在矩形上顯示控制台標題的東西,也沒有以任何方式弄亂我的代碼。 我燒了幾次代碼,沒有任何問題,但是,不知何故,控制台標題顯示在矩形上。

我以某種方式認為這與 LPCWSTR 數據類型有關,因為當我嘗試該函數時,手動SetConsoleTitle()

幫我找到解決辦法,好嗎?

由於標題通常是不變的,您可以簡單地調用

SetConsoleTitle(L"My Title"); //or
const wchar_t* title = L"My Title";
SetConsoleTitle(title);

通常,使用MultiByteToWideChar將 ANSI 或 UTF8 轉換為 UTF16

#include <iostream>
#include <string>
#include <windows.h>

std::wstring u16(const char* in, int codepage)
{
    if (!in) return std::wstring(L"");
    int size = MultiByteToWideChar(codepage, 0, in, -1, NULL, 0);
    std::wstring ws(size, L'\0');
    MultiByteToWideChar(codepage, 0, in, -1, ws.data(), size);
    return ws;
}

int main()
{
    const char* str = "My Title"; //<- ANSI string
    SetConsoleTitle(u16(str, CP_ACP).c_str());
    std::string s;
    std::cin >> s;

    str = reinterpret_cast<const char*>(u8"Ελληνικά"); //<- UTF8
    SetConsoleTitle(u16(str, CP_UTF8).c_str());
    std::cin >> s;

    return 0;
}

請注意,程序退出時標題會變回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM