Вопрос № 104196: Здраствуйте! В Visual Studio 2003 данный код работал:
CMainWnd::CMainWnd()
{
Create(NULL,"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
}
А в Visual Studio 2005 раб...
Вопрос № 104.196
Здраствуйте! В Visual Studio 2003 данный код работал:
CMainWnd::CMainWnd()
{
Create(NULL,"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
}
А в Visual Studio 2005 работать отказывается - пишет error C2664: 'CFrameWnd::Create' : cannot convert parameter 2 from 'const char [6]' to 'LPCTSTR.
С чем это связано и как эту проблему решить??? Помогите пожалуйста!
Отправлен: 03.10.2007, 20:47
Вопрос задал: Veal (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: mega
Здравствуйте, Veal!
дело не студии, а в выборе чарсета, в 2005-й по умолчанию стоит юникод, для исправления, окаймляйте строковые константы маркером _T(), в вашем случае это будет так:
Create(NULL,_T("Label"),WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
}
или, в частном порядке:
Create(NULL,L"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
}
Управлять чарсетом можно отсюда: Project->Properties->General->Character Set
Ответ отправил: mega (статус: 2-ой класс)
Ответ отправлен: 03.10.2007, 20:56 Оценка за ответ: 5
Отвечает: Ross
Здравствуйте, Veal!
Попробуй написать так: Create(NULL,L"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL);
--------- Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 03.10.2007, 21:05
Отвечает: Aristos
Здравствуйте, Veal!
Это связано с тем, что в MFC используются обобщенные строки. То есть работа со строковыми типами (в частности LPCTSTR) ведется однообразным образом для ANSI строк (символ char - 1 байт) и для UNICODE строк (символ wchar_t - 2 и более байт).
Таким образом, в зависимости от настроек компилятора LPCTSTR может быть const char* или const wchar_t*. В вашем случае, видимо, UNICODE-вариант. Есть несколько решений:
1. Использовать wchar_t вместо char и оформлять строки как L"string" и отдельные символы как L'c'.
2. Изменить настройки в [Project]/[Properties]/[Configuration Properties]/[General].
3. Использовать обобщенные строки с помощью макроса TEXT("string") или _T("string").
--------- нет ничего невозможного
Ответ отправил: Aristos (статус: 7-ой класс)
Ответ отправлен: 03.10.2007, 21:28
Отвечает: Новак Александр Васильевич
Здравствуйте, Veal!
И ещё хочется добавить, так для общего понимания, что по моему начиная с XP или чють пораньше Windows и весь её API`шный интерфейс работает под UNICODE – это соответствует вызовам API`шеек через суффикс на конце W.
И видимо на основании вышеизложенного Microsoft обратило на это внимание (чего-то она с этим не торопилась) и токо в VS 2005 в свойствах прэкта (Project/Properties во вкладке GENERAL по умолчанию при создании нового проекта ПАРАМЕТР Character Set выставляется Use Unicode Character Set) оно и понятно в этом случае не требуется переводить (фоново) из ANSCII to UNICODE.
--------- ПОЛЬЗУЙТЕСЯ НАШИМИ ПРОГРАММАМИ, ПОДДЕРЖИТЕ РОССИЙСКИХ ПРОГРАММИСТОВ ИНАЧЕ МЫ ВЫМРЕМ КАК МОМОНТЫ. ;-)