Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: MessageBox - как же все-таки его выводить?  (Прочитано 25130 раз)
0 Пользователей и 1 Гость смотрят эту тему.
andrystepa
Помогающий

ru
Offline Offline

« : 25-08-2008 06:02 » 


Во всех учебниках, которые у меня есть, да и кроме того, во всех статьях в инете по программированию с помощью WinAPI код вызова MessageBox выглядит например так:
Код:
MessageBox("Это MessageBox", "Ok", MB_OK);
Вставляю в простейшую программу - диалог с кнопкой,  при нажатии кнопки выскакивает MessageBox, вышеуказанный код и компилирую в MS VisualStudio 2008 - выдает ошибку:
Код:
c:\programming\visual studio 2008\projects\project1\project1\dial\dial\dialdlg.cpp(92) : error C2664: 'CWnd::MessageBoxW' : cannot convert parameter 2 from 'const char [3]' to 'LPCTSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast


Блин, если  conversion requires reinterpret_cast, C-style cast or function-style cast, то примеры кода, что я вижу во всех учебниках - ошибочны?!! Что все выбрасывают инструкции преобразования типа, когда пишут пример кода, и при этом нигде об этом не упоминают?! Что-то не верится.
Объясните пожалуйста, в чем же дело?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 25-08-2008 06:25 » 

'CWnd::MessageBoxW'  - значит компилятор пользует юникод, а "Ok" - это не юникод.
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 25-08-2008 06:32 » 

Алексей1153++, таки как лечить то?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 25-08-2008 06:44 » 

хм... Джон лучше расскажет, но тут такие варианты:
1) _T("Ok")
2) отрубить в настройках использование юникода - вызовется MessageBoxA
« Последнее редактирование: 25-08-2008 06:49 от Алексей1153++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 25-08-2008 06:52 » 

а то и вообще напрямую
MessageBoxA вызвать Улыбаюсь Но так, думается, будет не совсем правильно
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 25-08-2008 07:37 » 

+1 к использованию макроса _T. Если проект гарантированно и бесповоротно использует юникод - возможно, стоит константные строки сразу юникодовые использовать, без подстановки макросом (L"строка").
Записан
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 11-09-2008 14:40 » 

Я вот думаю, что если пользоваться АПИ, то вызывать надо так
::MessageBox("Это MessageBox", "Ok", MB_OK);

Ага
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 11-09-2008 14:46 » 

Scorp__), а ещё лучше, если перед "Это MessageBox" поставить хэндл родительского окна или NULL
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 16-09-2008 17:20 » 

Джон, точно замечено )
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Лёха
Гость
« Ответ #9 : 16-09-2008 17:52 » 

LPCTSTR - это тот же const wchar_t *
Записан
Лёха
Гость
« Ответ #10 : 16-09-2008 17:54 » 

меня в таком случае лечит символ L перед строкой или макрос _TEXT
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 17-09-2008 05:34 » 

LPCTSTR - это тот же const wchar_t *

Абсолютно неверно. Это зависит от ключа UNICODE, если он не установлен, то это простой const char*. Простое правило - если присутствует Т или _T, то это универсальный тип, макрос, ф-я и тд.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines