Em primeiro lugar, o que é exatamente? Acho que é um ponteiro (LPC significa constante de ponteiro longo), mas o que significa "W"? É um ponteiro específico para uma string ou um ponteiro para uma string específica? Por exemplo, eu quero fechar uma janela chamada "TestWindow".
HWND g_hTest;
LPCWSTR a;
*a = ("TestWindow");
g_hTest = FindWindowEx(NULL, NULL, NULL, a);
DestroyWindow(g_hTest);
O código é ilegal e não funciona, pois const char [6] não pode ser convertido para CONST WCHAR. Eu não entendo nada. Quero obter uma compreensão clara de todos esses LPCWSTR, LPCSTR, LPSTR. Tentei encontrar algo, mas fiquei ainda mais confuso. No site msdn FindWindowEx
é declarado como
HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
Portanto, o último parâmetro é LPCSTR e o compilador exige LPCWSTR. Por favor ajude.
Respostas:
LPCWSTR
significa "Ponteiro longo para string larga constante". O W significa Wide e significa que a string é armazenada em um caractere de 2 bytes em relação ao normalchar
. Comum para qualquer código C / C ++ que precise lidar apenas com strings não ASCII. =Para obter uma string literal C normal para atribuir a a
LPCWSTR
, você precisa prefixá-la com LLPCWSTR a = L"TestWindow";
fonte
SPCWSTR
.36UL
em C # é o mesmo que(ulong)36
(ulong sendo um inteiro sem sinal de 64 bits).@
pode ser usado no mesmo idioma como um prefixo para strings, mudando ligeiramente a forma como são analisadas.LPCWSTR
é equivalente awchar_t const *
. É um ponteiro para uma ampla sequência de caracteres que não será modificada pela chamada de função.Você pode atribuir a
LPCWSTR
s prefixando um L a um literal de string:LPCWSTR *myStr = L"Hello World";
LPC T STR e quaisquer outros tipos T , tomam um tipo de string dependendo das configurações Unicode para seu projeto. Se
_UNICODE
for definido para o seu projeto, o uso de tipos T é o mesmo que as formas de caracteres largos, caso contrário, as formas Ansi. A função apropriada também será chamada desta forma:FindWindowEx
é definida comoFindWindowExA
ouFindWindowExW
dependendo desta definição.fonte
É um ponteiro longo para uma string ampla e constante (ou seja, uma string de caracteres largos).
Desde que é uma grande corda, você quer fazer o seu constante olhar como:
L"TestWindow"
. Eu também não criaria o intermediárioa
, apenas passariaL"TestWindow"
o parâmetro:ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
Se você quiser ser pedantemente correto, um "LPCTSTR" é uma string de "texto" - uma string larga em uma construção Unicode e uma string estreita em uma construção ANSI, então você deve usar a macro apropriada:
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
Poucas pessoas se preocupam em produzir código que possa compilar para conjuntos de caracteres Unicode e ANSI, e se você não conseguir fazer com que ele realmente funcione corretamente, pode ser um pouco mais de trabalho extra com pouco ganho. Nesse caso específico, não há muito trabalho extra, mas se você estiver manipulando strings, há todo um conjunto de macros de manipulação de string que resultam nas funções corretas.
fonte