Форум программистов, компьютерный форум CyberForum.ru

Функция CreateWindow - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.71
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 05:58     Функция CreateWindow #1
C++
1
2
3
4
5
6
7
#include <windows.h>
...
hMainWnd = CreateWindow( 
        szClassName, "A Hello1 Application", WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
        (HWND)NULL, (HMENU)NULL,
        (HINSTANCE)hInstance, NULL);
Недавно начал изучать WIN API и столкнулся с ещё одной проблемой:
CreateWindow подчёркнуто красным пи наведении на неё мышью написано:
аргумент типа "char *" несовместим с параметром типа "LPCWSTR" , а при компиляции ошибка
error C2664: CreateWindowExW: невозможно преобразовать параметр 2 из "char [8]" в "LPCWSTR"
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции.
Помогите кто знает!
Работаю в Visual c++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2011, 05:58     Функция CreateWindow
Посмотрите здесь:

что за функция такая strstr? или это не функция? C++
C++ Отличия: CreateWindow() от СFrameWnd::Create();
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get() C++
Нужно сделать, чтобы программа состояла из 3 функций, тоесть 1-ая функция ввода массива, 2-ая основная функция, 3-я- вывод массива C++
C++ Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.03.2011, 06:34     Функция CreateWindow #2
C++
1
L"A Hello1 Application"
2 из "char [8]" в "LPCWSTR"
тоже где-то простая строка, вместо широкой
широкая строка имеет тип wchar_t, который может быть определён через typedef в виде всяких LPCWSTR

msdn. CreateWindow
скорее всего szClassName тоже не широкая строка

msdn. types
ссылка на typedef'ы
там видно, что с макроопределением UNICODE тип аргументов у CreateWindow является широкой строкой
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 06:44  [ТС]     Функция CreateWindow #3
C++
1
L"A Hello1 Application
написал так всё равно ошибка
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.03.2011, 06:46     Функция CreateWindow #4
ещё аргумент тоже через широкую строку
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 06:48  [ТС]     Функция CreateWindow #5
А что переписывать-то
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.03.2011, 06:49     Функция CreateWindow #6
C++
1
CreateWindow(szClassName, "A Hello1 Application"
вот эти два аргумента должны быть широкими строками
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 06:49  [ТС]     Функция CreateWindow #7
макроопределение UNICODE не помогает
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.03.2011, 06:53     Функция CreateWindow #8
короче этот szClassName нужно сделать так

C++
1
2
3
4
    LPCWSTR szClassName = L"abc"; /* своё поставишь */
    LPCWSTR mess = L"def"; /* своё поставишь */
 
    CreateWindow(szClassName, mess, ... );
Добавлено через 1 минуту
Цитата Сообщение от XFloat
макроопределение UNICODE не помогает
оно не при чём
там, потом, когда прочитаешь ссылки, переделаешь LPCWSTR на LPCTSTR (тогда нужен UNICODE)
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 07:01  [ТС]     Функция CreateWindow #9
Всё равно пишет при компиляции: CreateWindowExW: невозможно преобразовать параметр 2 из "char [8]" в "LPCWSTR"
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.03.2011, 07:10     Функция CreateWindow #10
msdn. CreateWindowExW
то же самое там, тот же самый тип
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 10:49  [ТС]     Функция CreateWindow #11
Мож reinterpret_cast куда нить приспособить?
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
04.03.2011, 11:01     Функция CreateWindow #12
Как по мне, так reinterpret_cast плохой тон. Касты вообще зло
C++
1
2
3
4
5
6
7
8
9
10
11
#include <atlconv.h>
...
{
USES_CONVERTION;
...
hWnd = CreateWindow( 
       szWindowClass, A2W("A Hello1 Application"), WS_OVERLAPPEDWINDOW,
       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
       (HWND)NULL, (HMENU)NULL,
       (HINSTANCE)hInstance, NULL);
}
Это как вариант.
Подробнее про макросы(MSDN)

Можешь вообще всю программу в multibyte вместе unicode сделать.
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 11:43  [ТС]     Функция CreateWindow #13
А где взять atlconv.h
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
04.03.2011, 12:03     Функция CreateWindow #14
zulkis, лучше использовать макросы _T или _TEXT из tchar.h
C
1
2
3
4
5
6
#include <tchar.h>
 
/* ... */
 
_T("Main Window);
_TEXT("Main Window");
Эффект дают одинаковый, подставляют либо wchar_t, либо просто char в зависимости от настроек проекта.
n971030
 Аватар для n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,169
28.07.2012, 01:37     Функция CreateWindow #15
Цитата Сообщение от XFloat Посмотреть сообщение
C++
1
2
3
4
5
6
7
#include <windows.h>
...
hMainWnd = CreateWindow( 
        szClassName, "A Hello1 Application", WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
        (HWND)NULL, (HMENU)NULL,
        (HINSTANCE)hInstance, NULL);
Недавно начал изучать WIN API и столкнулся с ещё одной проблемой:
CreateWindow подчёркнуто красным пи наведении на неё мышью написано:
аргумент типа "char *" несовместим с параметром типа "LPCWSTR" , а при компиляции ошибка
error C2664: CreateWindowExW: невозможно преобразовать параметр 2 из "char [8]" в "LPCWSTR"
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции.
Помогите кто знает!
Работаю в Visual c++

C++
1
2
3
4
#include <TCHAR.H>
 
используй макрос
_T("Это я придумал");
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
28.07.2012, 10:54     Функция CreateWindow #16
Вы все пошли не туда. Самый простой способ - это поставить в настройках проекта использование многобайтной кодировки.
Properties -> Character Set: Use Multi-Byte Character Set
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2012, 10:59     Функция CreateWindow
Еще ссылки по теме:

есть функция которая размещает 2 числа в порядке возрастания, значения в эту функцию передаю по указателю, но по указателям функция их не сортирует C++
Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений C++
Функция заполняющая массив и функция вывода массива C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
n971030
 Аватар для n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,169
28.07.2012, 10:59     Функция CreateWindow #17
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Вы все пошли не туда. Самый простой способ - это поставить в настройках проекта использование многобайтной кодировки.
Properties -> Character Set: Use Multi-Byte Character Set
и на что это влияет???????????7
Yandex
Объявления
28.07.2012, 10:59     Функция CreateWindow
Ответ Создать тему
Опции темы

Текущее время: 11:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru