Несколько лет назад я занимался базовым программированием на C. Теперь я пытаюсь переучить то, что я забыл, а также выучить Visual C ++.Я смущен, хотя все строковые параметры и теперь дополнительный уровень попытки сделать мои программы Unicode совместимыми.Я читал Beginning Visual C ++ 2010, а также читал онлайн, чтобы узнать эту информацию.
В качестве упражнения я пишу очень простую программу, которая просит пользователя ввести некоторый текст, а затем отобразить этот текст в форме.сообщения.Программа работает, но мой способ заставить ее работать больше - это угадывать и искать другие примеры, а не понимать, зачем мне нужно преобразовывать различные строки в разные типы.
Код:
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Windows.h"
using std::wcin;
using std::wcout;
using std::wstring;
int _tmain(int argc, _TCHAR* argv[])
{
wstring myInput;
wcout << "Enter a string: ";
getline(wcin, myInput);
MessageBoxW(NULL, myInput.c_str(), _T("Test MessageBox"), 64);
return 0;
}
Синтаксис MessageBox:
int WINAPI MessageBox(
__in_opt HWND hWnd,
__in_opt LPCTSTR lpText,
__in_opt LPCTSTR lpCaption,
__in UINT uType
);
С другой стороны, если я просто использую аргумент командной строки в качестве текста окна сообщения, мне вообще не нужно преобразовывать строку иЯ не уверен, почему.
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Windows.h"
using std::wcout;
int _tmain(int argc, _TCHAR* argv[])
{
MessageBoxW(NULL, argv[1], _T("Test MessageBox"), 64);
return 0;
}
Моя путаница:
Почему мне нужно использовать c_str () для аргумента 2 для MessageBoxW и почему янужно использовать макрос _T () (?) в аргументе 3?
Почему программа работала во втором примере кода без какого-либо преобразования?
Что именно означает LPCTSTR?Я вижу другой вариант в функциях MSDN, называемый LPTSTR.
Спасибо!