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

трабла с MessageBox - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
OnlySergio
3 / 3 / 0
Регистрация: 30.03.2010
Сообщений: 55
25.11.2010, 14:58     трабла с MessageBox #1
Вот такая вот задачка сначала задается текст в ANSI ,затем его конвертируем в UNICODE и должны вывести его 3 способами - через _tprintf , WriteConsole, MessageBox . Написал однако почему-то не срабатывает ..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "stdafx.h"
#include <tchar.h>
#include <locale.h>
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
int main()
{
    _tsetlocale(LC_ALL, "Russian");
    char family[]="Бубликов Олег Петрович";
    wchar_t buffer[sizeof(family)];
 
    MultiByteToWideChar(CP_ACP,0,family,sizeof(family),buffer,sizeof(buffer));
    
    std::cout<<"Вывод до преобразования: "<<family<<endl;
    std::cout<<"Вывод после преобразования: ";
    wprintf((wchar_t*)&buffer);
    MessageBox(NULL,buffer,"Проверка вывода UNICODE",MB_OK);
    HANDLE _stdout = GetStdHandle(STD_OUTPUT_HANDLE);
    std::cout<<"\n";
    WriteConsole(_stdout,buffer,sizeof(family),0,0);
    _tprintf(_T("%s\n"),_T(buffer)); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2010, 14:58     трабла с MessageBox
Посмотрите здесь:

Трабла с функцией ( C++
Опять трабла с ответом C++
C++ трабла кодом(Функция)
C++ трабла с выводом строки
Трабла с прогой C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
25.11.2010, 15:31     трабла с MessageBox #2
А что именно не получается?

Добавлено через 2 минуты
ладно, сам проверил, вот так нужно:
C++
1
MessageBoxW(NULL,buffer,L"Проверка вывода UNICODE",MB_OK);
OnlySergio
3 / 3 / 0
Регистрация: 30.03.2010
Сообщений: 55
25.11.2010, 16:52  [ТС]     трабла с MessageBox #3
спс , и вот еще как быть с printf и WriteConsole , а то они как-то криво работают (некорректно выводят)
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
25.11.2010, 17:02     трабла с MessageBox #4
А что не получается? У меня все выводит:
трабла с  MessageBox
OnlySergio
3 / 3 / 0
Регистрация: 30.03.2010
Сообщений: 55
25.11.2010, 17:06  [ТС]     трабла с MessageBox #5
C++
1
2
WriteConsole(_stdout,buffer,sizeof(family),0,0);
    _tprintf(_T("%s\n"),_T(buffer));
Вот эти две строки не правильно выводят. Скрин прилагается
Миниатюры
трабла с  MessageBox  
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
25.11.2010, 17:37     трабла с MessageBox #6
точно, а у меня после MessageBox'а зкрывалась. Вобщем вот так:
C++
1
WriteConsoleW(....)
А по поводу _tprintf, то так и должно быть (всмысле выводит что попало).
Вот из файла tchar.h
C++
1
#define _tprintf        printf
А ф-ция printf() не умеет выводить unicode.

Добавлено через 1 минуту
вот же, все уже выведенно:
C++
1
 wprintf((wchar_t*)&buffer);
зачем еще _tprintf() ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2010, 20:38     трабла с MessageBox
Еще ссылки по теме:

Как быть и что делать? Трабла с шаблонами C++
Трабла с кодом C++
C++ Трабла с конструктором

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

Или воспользуйтесь поиском по форуму:
OnlySergio
3 / 3 / 0
Регистрация: 30.03.2010
Сообщений: 55
25.11.2010, 20:38  [ТС]     трабла с MessageBox #7
Хм , теперь надо переделать чтобы был массив строк и менялась кодировка в UNICODE и потом отсортировать массив с помощью qsort
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "stdafx.h"
#include <tchar.h>
#include <locale.h>
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
int cmp_func(const void *a, const void *b){
        return strcmp(*(char**)a, *(char**)b);
}
int main()
{
    _tsetlocale(LC_ALL, "Russian");
    char *family[]={"Бубликов ","Олег","Петрович"};
    wchar_t *buffer[sizeof(family)];
 
    MultiByteToWideChar(CP_ACP,0,family,sizeof(family),buffer,sizeof(buffer));
    
    std::cout<<"Вывод до преобразования: "<<family<<endl;
    std::cout<<"Вывод после преобразования: ";
    wprintf((wchar_t*)&buffer);
    MessageBoxW(NULL,buffer,L"Проверка вывода UNICODE",MB_OK);
    HANDLE _stdout = GetStdHandle(STD_OUTPUT_HANDLE);
    std::cout<<"\n";
    WriteConsoleW(_stdout,buffer,sizeof(family),0,0);
    _tprintf(_T("%s\n"),_T(buffer)); 
    qsort(family,sizeof(family),sizeof(family),cmp_func);
}
Yandex
Объявления
25.11.2010, 20:38     трабла с MessageBox
Ответ Создать тему
Опции темы

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