Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2009, 13:03   #1
STill_ace
Пользователь
 
Аватар для STill_ace
 
Регистрация: 18.06.2009
Сообщений: 15
По умолчанию Win32 как вывести на экран значение переменной

Привет. Я сейчас занимаюсь Win32 API. И не знаю, как вывести на экран значение переменной.
Например,

LONG long = 50;

Как мне вывести на экран в windows-программе значение переменной long в отдельном окне?

Я пробовал применять ф-ию MessgeBox(), но в этой ф-ии тип выводимого значения должен быть LPCTSTR.
Я пробовал писать так:
MessageBox( hWnd, static_cast<LPCWSTR>(long), L"", MB_OK);
Но программа не компилируется, потому что не может преобразовать из LONG в LPCTSTR.

Еще пробовал так: MessageBox( hWnd, (LPCTSTR)long, L"", MB_OK);
Тогда прога компилируется, но при выполнении мессаджбокс выводит пустую строку вместо значения переменной лонг, равного 50.

Так как, черт подери, мне преобразовать переменную LONG в LPCTSTR, чтобы потом можно было вывести ее на экран в виде текста?

Я начинающий с++ программист, так что прошу простить меня за невежество в этом плане.

Последний раз редактировалось STill_ace; 22.08.2009 в 13:08.
STill_ace вне форума Ответить с цитированием
Старый 22.08.2009, 13:10   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Нужно сначала сконвертить число в строку.
Пример:
Код:
 long LONG = 50;
 char buf[10];
 ltoa(LONG,buf,10); 
 MessageBox(NULL,(LPCTSTR)buf,"",MB_OK);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.08.2009, 13:24   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

или так:
Код:
int i = 5;
char buff[16];
sprintf(buff, "%d", i);
::MessageBox(::GetActiveWindow(), buff, 0, 0);
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 22.08.2009, 13:54   #4
STill_ace
Пользователь
 
Аватар для STill_ace
 
Регистрация: 18.06.2009
Сообщений: 15
По умолчанию

Спасибо. Но почему-то в обоих вариантах мессадж бокс выводит какие-то китайские иероглифы вместо цифры...
STill_ace вне форума Ответить с цитированием
Старый 22.08.2009, 14:01   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от STill_ace
Но почему-то в обоих вариантах мессадж бокс выводит какие-то китайские иероглифы вместо цифры...
Хм.. А скрин можете показать? Не должно такого быть.

Попробуйте еще так. Это не должно помочь, но вдруг...
Код:
 long LONG = 50;
 char buf[10];
 strcpy(buf,"");
 ltoa(LONG,buf,10); 
 strcat(buf,"\0");
 MessageBox(NULL,(LPCTSTR)buf,"",MB_OK);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.08.2009, 14:29   #6
STill_ace
Пользователь
 
Аватар для STill_ace
 
Регистрация: 18.06.2009
Сообщений: 15
По умолчанию

Ноль в конце тоже не помог.

Например, пишу вот такой код:

Код:
         
int i = 50, j;
char ch[10];
j = sprintf( ch, "%d", i );
MessageBox( NULL, (LPCWSTR)ch, L"box", MB_OK );
А в результате получаю то, что на скриншоте.
Изображения
Тип файла: jpg иероглифы.jpg (38.6 Кб, 177 просмотров)
STill_ace вне форума Ответить с цитированием
Старый 22.08.2009, 14:40   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А вот так попробуйте:
Код:
 int i=70;
 wchar_t buf[100];
 swprintf(buf,L"%d",i);
 MessageBoxW(NULL,buf,L"",MB_OK);
Кстати, а почему у вас их там аж 5 штук?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 22.08.2009 в 14:43.
Sazary вне форума Ответить с цитированием
Старый 22.08.2009, 14:58   #8
STill_ace
Пользователь
 
Аватар для STill_ace
 
Регистрация: 18.06.2009
Сообщений: 15
По умолчанию

Еще я обнаружил, что если, например, написать вот такой код ...

Код:
int i = 50, j;
char ch[10];
j = sprintf( ch, "какая-то надпись  %d", i );
MessageBox( NULL, (LPCWSTR)ch, L"box", MB_OK );
... то какая-то надпись тоже выводится в виде квадратов и иероглифов

Цитата:
Кстати, а почему у вас их там аж 5 штук?
не знаю..
STill_ace вне форума Ответить с цитированием
Старый 22.08.2009, 15:24   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А код из 7-го поста тоже не работает?

Цитата:
... то какая-то надпись тоже выводится в виде квадратов и иероглифов
С надписями на английском то же самое?

Возможно, в настройках проекта/среды нужно копать.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.08.2009, 15:29   #10
STill_ace
Пользователь
 
Аватар для STill_ace
 
Регистрация: 18.06.2009
Сообщений: 15
По умолчанию

Цитата:
А код из 7-го поста тоже не работает?
да

и английские буквы тоже в виде иероглифов.

Вот такой вывод работает нормально, и если вместо Hello World написать по русски Привет Мир, то тоже нормально выводится.
MessageBox( NULL, L"Hello World", L"box", MB_OK );

Судя по всему, проблема в преобразовании типов. Когда мы преобразовываем char* в LPCWSTR (LPCWSTR)ch, происходит какая-то фигня, и результат получается в виде иероглифов.

Последний раз редактировалось STill_ace; 22.08.2009 в 15:40.
STill_ace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести на экран минимальное значение среди составных чисел массива. dorofei Помощь студентам 33 24.05.2009 20:42
Как прочитать значение переменной javascript в TWebBrowser? u961 Работа с сетью в Delphi 2 01.04.2009 23:22
Как вывести на экран... (Делфи)!!! DjVidan Помощь студентам 14 09.03.2009 16:31
как получить значение переменной smoke888 PHP 3 20.06.2008 02:11
Как получить значение системной переменной в С++ PersonaGrata Общие вопросы C/C++ 2 29.02.2008 22:14