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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.71
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
#1

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

04.03.2011, 05:58. Просмотров 7593. Ответов 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++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2011, 05:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция CreateWindow (C++):

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

При вызове CreateWindow в функции вылетает необработанное исключение (найти и исправить ошибку) - C++
При вызове CreateWindow в функции HRESULT Render_CreateWindow(LPCTSTR wclass, LPCTSTR wname, LPCSTR icon) { // Регистрация класса ...

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений - C++
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой нужно удалить весь текст в скобках,...

Функция sqrt: существует более одного экземпляра. Функция перегруженная - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace std; int main(){ float s, p; int c, a; s=0; ...

Перегрузка операций: friend-функция или функция-член класса - C++
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и friend. Вот к примеру такой код. class...

какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get() - C++
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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 является широкой строкой
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 06:44  [ТС] #3
C++
1
L"A Hello1 Application
написал так всё равно ошибка
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.03.2011, 06:46 #4
ещё аргумент тоже через широкую строку
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 06:48  [ТС] #5
А что переписывать-то
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.03.2011, 06:49 #6
C++
1
CreateWindow(szClassName, "A Hello1 Application"
вот эти два аргумента должны быть широкими строками
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 06:49  [ТС] #7
макроопределение UNICODE не помогает
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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)
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 07:01  [ТС] #9
Всё равно пишет при компиляции: CreateWindowExW: невозможно преобразовать параметр 2 из "char [8]" в "LPCWSTR"
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.03.2011, 07:10 #10
msdn. CreateWindowExW
то же самое там, тот же самый тип
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 10:49  [ТС] #11
Мож reinterpret_cast куда нить приспособить?
zulkis
682 / 609 / 38
Регистрация: 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 сделать.
XFloat
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 18
04.03.2011, 11:43  [ТС] #13
А где взять atlconv.h
fasked
Эксперт С++
4935 / 2515 / 180
Регистрация: 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 в зависимости от настроек проекта.
n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,232
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("Это я придумал");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2012, 01:37
Привет! Вот еще темы с ответами:

Чистая виртуальная функция функция не имеет оператора переопределения - C++
Пишу программу для записи заметок. Есть 2 класса: Page и Note. Note наследуется от Page. Page.h #pragma once ...

что за функция такая strstr? или это не функция? - C++
void search(sp *list){ sp *prt = list; char f,r; cout&lt;&lt;Rus(&quot;введите текст&quot;)&lt;&lt;endl; cin&gt;&gt;f; cout&lt;&lt;Rus(&quot;введите выходной...

Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов - C++
Write программу с использованием класса Вектор (не без помощи форумчанина), но необходимо создать производный класс, в котором реализована...

Функция заполняющая массив и функция вывода массива - C++
Напишите две функции. Первая функция заполняет массив, вторая функция выводит массив на экран


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.07.2012, 01:37
Ответ Создать тему
Опции темы

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