Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/64: Рейтинг темы: голосов - 64, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
1

Функция CreateWindow

04.03.2011, 05:58. Просмотров 11646. Ответов 16
Метки нет (Все метки)

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++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2011, 05:58
Ответы с готовыми решениями:

Отличия: CreateWindow() от СFrameWnd::Create();
ЛЮДИ! Чем отличается CreateWindow() от СFrameWnd::Create(); Они вообще как-нибудь друг с...

При вызове CreateWindow в функции вылетает необработанное исключение (найти и исправить ошибку)
При вызове CreateWindow в функции HRESULT Render_CreateWindow(LPCTSTR wclass, LPCTSTR wname,...

Функция CreateWindow
Здравствуйте. У меня такой вопрос возник. Для чего нужен последний параметр функции CreateWindow ?...

Функция CreateWindow не создает дочернее окно
Приветствую! Застрял с довольно идиотской проблемой. Необходимо создать приложение с дочерним...

16
4845 / 3266 / 465
Регистрация: 10.12.2008
Сообщений: 10,569
04.03.2011, 06:34 2
C++
1
L"A Hello1 Application"
2 из "char [8]" в "LPCWSTR"
тоже где-то простая строка, вместо широкой
широкая строка имеет тип wchar_t, который может быть определён через typedef в виде всяких LPCWSTR

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

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

C++
1
2
3
4
    LPCWSTR szClassName = L"abc"; /* своё поставишь */
    LPCWSTR mess = L"def"; /* своё поставишь */
 
    CreateWindow(szClassName, mess, ... );
Добавлено через 1 минуту
Цитата Сообщение от XFloat
макроопределение UNICODE не помогает
оно не при чём
там, потом, когда прочитаешь ссылки, переделаешь LPCWSTR на LPCTSTR (тогда нужен UNICODE)
0
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 07:01  [ТС] 9
Всё равно пишет при компиляции: CreateWindowExW: невозможно преобразовать параметр 2 из "char [8]" в "LPCWSTR"
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
0
4845 / 3266 / 465
Регистрация: 10.12.2008
Сообщений: 10,569
04.03.2011, 07:10 10
msdn. CreateWindowExW
то же самое там, тот же самый тип
0
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 10:49  [ТС] 11
Мож reinterpret_cast куда нить приспособить?
0
685 / 612 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
04.03.2011, 11:01 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 сделать.
0
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 11:43  [ТС] 13
А где взять atlconv.h
0
Эксперт С++
5015 / 2594 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.03.2011, 12:03 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 в зависимости от настроек проекта.
0
183 / 115 / 4
Регистрация: 23.01.2010
Сообщений: 1,319
28.07.2012, 01:37 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("Это я придумал");
0
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,743
28.07.2012, 10:54 16
Вы все пошли не туда. Самый простой способ - это поставить в настройках проекта использование многобайтной кодировки.
Properties -> Character Set: Use Multi-Byte Character Set
0
183 / 115 / 4
Регистрация: 23.01.2010
Сообщений: 1,319
28.07.2012, 10:59 17
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Вы все пошли не туда. Самый простой способ - это поставить в настройках проекта использование многобайтной кодировки.
Properties -> Character Set: Use Multi-Byte Character Set
и на что это влияет???????????7
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2012, 10:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

CreateWindow
Подскажите пожалуйста почему у меня подчеркивает CreateWindow в case WM_CREATE и MAX_LOADSTRING. ...

ImpersonateLoggedOnUser + CreateWindow
Добрый день, друзья! Суть проблемы такова. Имеется сервис с правами SYSTEM. Первоначально хотелось...

Ошибка CreateWindow
#include &lt;windows.h&gt; #define width 640; #define height 480; LRESULT CALLBACK WindowProc(...

WinApi - CreateWindow
Подскажите в чем ошибка!! Почему не распознается CreateWindow?? #include &quot;windows.h&quot;...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.