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

Использование функции MessageBoxA - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
HeHyA4o
1 / 1 / 0
Регистрация: 17.10.2011
Сообщений: 46
07.11.2011, 19:31     Использование функции MessageBoxA #1
Решил после Delphi перейти на C++, сразу появилось сотня проблем, сначало пол часа пытался объявить переменную String, оказалось что первая буква должна быть на нижнем регистре и нужно в using подключать std... Или объявлять как std::string
в общем проблема с объявлением решена, теперь пытаюсь вывести месагу используя MessageBoxA (Оказалось что просто MessageBox как в Delphi тут нет, но это одно и тоже )) )
C++
1
2
3
std::string sXs="";
sXs="qwerty";
MessageBoxA(0,sXs,"Caption",0);
Вот код, орет на sXs, как правильно заставить работать код? PChar как в Delphi не работает PAnsiChar тоже
Выдрал само объявление MessageBoxA из winuser.h
C++
1
2
3
4
5
6
WINAPI
MessageBoxA(
    IN HWND hWnd,
    IN LPCSTR lpText,
    IN LPCSTR lpCaption,
    IN UINT uType);
что за LPCSTR ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.11.2011, 19:43     Использование функции MessageBoxA #2
HeHyA4o, read msdn. работать с WinAPI напрямую через стандартные С++ типы нельзя.
HeHyA4o
1 / 1 / 0
Регистрация: 17.10.2011
Сообщений: 46
07.11.2011, 19:46  [ТС]     Использование функции MessageBoxA #3
Цитата Сообщение от ForEveR Посмотреть сообщение
HeHyA4o, read msdn. работать с WinAPI напрямую через стандартные С++ типы нельзя.
т.е надо string значение засунуть в LPCSTR и выводить уже его?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.11.2011, 19:52     Использование функции MessageBoxA #4
HeHyA4o, Почитайте msdn.

Добавлено через 3 минуты
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Добавлено через 1 минуту
http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
-=ЮрА=-
Заблокирован
Автор FAQ
07.11.2011, 22:49     Использование функции MessageBoxA #5
Цитата Сообщение от HeHyA4o Посмотреть сообщение
то за LPCSTR ?
- const char, запихивайте вашу string в MessageBox так
C++
1
2
3
string text;
string capt;
MessageBox(NULL,text.c_str(),capt.c_str(),MB_OK);
Если не хотим первый параметр NULL, то HWND консоли подхватить проще всего
C
1
HWND hWnd = GetForegroundWindow();
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.11.2011, 09:02     Использование функции MessageBoxA #6
Пиши вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <windows.h>
 
HWND        hwnd;
 
LPCTSTR str1 = "Programina";
LPCTSTR str2 = "Програмина";
 
 
int WINAPI WinMain (HINSTANCE hinst,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
    int resp = MessageBox(hwnd, str1, str2, MB_YESNO );
 
    if (resp == IDNO)
    {}
    else if (resp == IDYES)
    {}
 
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
08.11.2011, 10:50     Использование функции MessageBoxA #7
programina, ТС чётко сказал с чём работает
Цитата Сообщение от HeHyA4o Посмотреть сообщение
Или объявлять как std::string
Цитата Сообщение от HeHyA4o Посмотреть сообщение
std::string sXs="";
sXs="qwerty";
- а если в программе text и caption прогой формируются тоже так делать???
Цитата Сообщение от programina Посмотреть сообщение
LPCTSTR str1 = "Programina";
LPCTSTR str2 = "Програмина";
-
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.11.2011, 17:05     Использование функции MessageBoxA #8
Цитата Сообщение от ForEveR Посмотреть сообщение
работать с WinAPI напрямую через стандартные С++ типы нельзя
Можно. А вот через STL типы нельзя.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.11.2011, 18:20     Использование функции MessageBoxA #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
programina, ТС чётко сказал с чём работает

- а если в программе text и caption прогой формируются тоже так делать???
-
Ему похоже заняться нечем вот он и выдумывает всякие там str::string,
Kastaneda
08.11.2011, 19:34
  #10

Не по теме:

Цитата Сообщение от HeHyA4o Посмотреть сообщение
Оказалось что просто MessageBox как в Delphi тут нет, но это одно и тоже
Совершенно не знаю Delphi, но общался с делфийцами, так вот могу сказать, что и в Delphi просто MessageBox нету, потому что ее нет в WinAPI. Просто там что-то типа макроса (или что там в Delphi), а на самом деле вызывается все та же MessageBoxA (или MessageBoxW).

diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.11.2011, 19:38     Использование функции MessageBoxA #11
Цитата Сообщение от programina Посмотреть сообщение
Ему похоже заняться нечем вот он и выдумывает всякие там str::string,
А вы предлагаете си-строки использовать?...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.11.2011, 19:54     Использование функции MessageBoxA #12
Цитата Сообщение от Kastaneda Посмотреть сообщение
там что-то типа макроса
Точно так же, как и в WinAPI на C++. Для почти всех функций с постфиксом A|W предусмотрен макрос, автоматически выбирающий какую из функций выбрать, в зависимости от определения символа _UNICODE.
Kastaneda
08.11.2011, 19:58
  #13

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
Точно так же, как и в WinAPI на C++. Для почти всех функций с постфиксом A|W предусмотрен макрос, автоматически выбирающий какую из функций выбрать, в зависимости от определения символа _UNICODE.
просто я не знаю, понимает ли delphi сишные макросы, поэтому так написал.

programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.11.2011, 07:19     Использование функции MessageBoxA #14
Можно подробнее про макрос. Где его можно просмотреть в текстовом виде, если можно просмотреть.
А я думала что, в Дельфи есть что-нибудь наподобие user32.h c описанием этой функции.
-=ЮрА=-
09.11.2011, 10:46
  #15

Не по теме:

Цитата Сообщение от programina Посмотреть сообщение
Ему похоже заняться нечем вот он и выдумывает всякие там str::string,
- programina, это срр - строка, если вы не практиковали работу с этим типом данных то для расширения кругозора скажу что это некий аналог CString. Я ещё раз вам говорю если текст и капшин текст в меседже должні формироваться програмно то ваш вариант неприемлим, зачем спорите?

programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.11.2011, 11:05     Использование функции MessageBoxA #16
Пусть делает вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h>
#include <string.h>
 
HWND hwnd;
 
int WINAPI WinMain (HINSTANCE hinst,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
    char str3[64][256];
    strcpy ( str3[0], "ноль" );
    strcpy ( str3[1], "один" );
    strcpy ( str3[2], "два" );
    strcpy ( str3[3], "три" );
 
    for ( int nomer = 0; nomer < 4; nomer++ )
    {
        int resp = MessageBox(hwnd, str3[nomer], str3[nomer], MB_YESNO );
        if (resp == IDNO){}
        else if (resp == IDYES){}
    }
    return 0;
}
и все поменяется программно
-=ЮрА=-
Заблокирован
Автор FAQ
09.11.2011, 11:34     Использование функции MessageBoxA #17

Не по теме:

Цитата Сообщение от programina Посмотреть сообщение
Пусть делает вот так:
- просто выносите мозг своим непониманием, ну выводите в меседж бокс строки которые читаются из файла, тоже константами их забъёте???Вам сделали замечание нет отсаиваете своё неправильное



Добавлено через 2 минуты

Не по теме:

PS:А если вам захочется строки в ваш массив читать скажу - строки разной длинны, весь файл может быть строкой - это чтоб вам формировать массив отбить охоту!

programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.11.2011, 13:50     Использование функции MessageBoxA #18
Или вот так. Просто косишь под мессажбокс:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <windows.h>
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    int i = 0;
    MSG  msg ;
    HWND hwnd;
 
    WNDCLASS wc = {0};
    wc.lpszClassName = "Application";
    wc.hInstance     = hInstance ;
    wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
    wc.lpfnWndProc   = WndProc ;
    wc.hCursor       = LoadCursor(0,IDC_ARROW);
    RegisterClass(&wc);
 
    hwnd = CreateWindow( "Application", "",
                        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                        400, 300, 300, 120,
                        0, 0, hInstance, 0 );
 
    char str[256][256];
    strcpy ( str[0], "Messagebox 0" );
    strcpy ( str[1], "Messagebox 1" );
    strcpy ( str[2], "Messagebox 2" );
    strcpy ( str[3], "Messagebox 3" );
    strcpy ( str[4], "Messagebox 4" );
    strcpy ( str[5], "Messagebox 5" );
    strcpy ( str[6], "Messagebox 6" );
    strcpy ( str[7], "Messagebox 7" );
    strcpy ( str[8], "Messagebox 8" );
    strcpy ( str[9], "Messagebox 9" );
    strcpy ( str[10], "Messagebox 10" );
    strcpy ( str[11], "Messagebox 11" );
    strcpy ( str[12], "Messagebox 12" );
    strcpy ( str[13], "Messagebox 13" );
 
    while ( msg.message != WM_QUIT )
    {
        if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
                 TranslateMessage(&msg);
                 DispatchMessage(&msg);
    }
        else
        {
                 i++;
                 if ( i == 14){ i = 0; }
                 Sleep(200);
                 SetWindowText(hwnd, TEXT(str[i]));
        }
    }
    return (int) msg.wParam;
}
 
 
 
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch(msg)
    {
        case WM_CREATE:
            CreateWindow(TEXT("button"), TEXT("Сигнал"), WS_VISIBLE | WS_CHILD, 50, 40, 80, 25, hwnd, (HMENU) 1, NULL, NULL);
            CreateWindow(TEXT("button"), TEXT("Выйти"), WS_VISIBLE | WS_CHILD, 150, 40, 80, 25, hwnd, (HMENU) 2, NULL, NULL);
            break;
 
        case WM_COMMAND:
            if (LOWORD(wParam) == 1) {
                MessageBeep(0);
            }
            if (LOWORD(wParam) == 2) {
                PostQuitMessage(0);
            }
            break;
 
        case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}
-=ЮрА=-
Заблокирован
Автор FAQ
09.11.2011, 14:44     Использование функции MessageBoxA #19
Цитата Сообщение от programina Посмотреть сообщение
Или вот так. Просто косишь под мессажбокс:
просто идиотизм!
Предлагаю Вам вывести в меседж бокс в поле text строки из файла, например эти
В файле строки(заранее неизвестно сколько строк и какие они!)
Programina
You are
Wrong


Добавлено через 3 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
В файле строки(заранее неизвестно сколько строк и какие они!)
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 <windows.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    HWND hWnd = GetForegroundWindow();
    string str;
    ifstream ifs("data.txt");
    if(!ifs)
        cout<<"Error open data.txt\n";
    else
    {
        while(!ifs.eof())
        {
            getline(ifs,str);
            MessageBox(hWnd,str.c_str(),"string",MB_OK);
        }
        ifs.close();
    }
    system("pause");
    return 0;
}
data.txt
Programina
You are
Wrong

Всё!

Добавлено через 4 минуты
programina, ещё будете спорить или всё же извлечёте ошибочность того что вы приводили???

 Комментарий модератора 
Не нарушайте правила форума, на которые сами периодически ссылаетесь. Относитесь уважительнее к участникам форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2011, 14:54     Использование функции MessageBoxA
Еще ссылки по теме:

использование массива из функции в другой функции C++
C++ Использование функции gets
C++ Как в MessageBoxA написать текст из переменной

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.11.2011, 14:54     Использование функции MessageBoxA #20

Не по теме:

-=ЮрА=-, Юра, успокойся. Вы друг друга не поняли кажется.


П.С. LPCSTR обязательно должна быть завершена нулем?
Yandex
Объявления
09.11.2011, 14:54     Использование функции MessageBoxA
Ответ Создать тему
Опции темы

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