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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.92
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
#1

MessageBox - C++

31.08.2011, 13:35. Просмотров 8239. Ответов 17
Метки нет (Все метки)

C++
1
2
3
4
5
6
#include "stdafx.h"
#include <windows.h> 
void main() 
{ 
MessageBox(0,L"Лалалал",L"Ололо", MB_OK); 
}
Здравствуйте.Есть такой вот рабочий код.При выполнении открывается окошко cmd и MessageBox.Как сделать чтобы открывался ТОЛЬКО MessageBox без окна cmd?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2011, 13:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос MessageBox (C++):

MessageBox - C++
Int COUNT=20; MessageBox(NULL, COUNT + L&quot; очков. &quot;, L&quot;Title &quot;, MB_OK); Почему не выводит значение переменной COUNT в окне...

messagebox() - C++
нужно из массива вывести данные в окно messagebox #include &quot;stdafx.h&quot; #include &quot;windows.h&quot; int WINAPI WinMain(HINSTANCE,...

MessageBox API - C++
MessageBox API: не получаеться обработать выбор. Мой код: int SELECT = MessageBox(hwnd, _T(&quot;Вы действительно хотите завершить работу...

Закрытия MessageBox - C++
Добрый день как программно можно закрыть окно MessageBox без нажатия кнопки OK

Вывод messagebox - C++
Необходимо вывести сообщение в messagebox,после выоа программа должна работать недожидаясь никаких действий,как это реолизовать

Не работает MessageBox - C++
Не работает след строчка MessageBox(&quot;Test&quot;); Выдает ошибку error C2664: 'MessageBoxW' : cannot convert parameter 1 from 'char '...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор FAQ
31.08.2011, 13:50 #2
Пробуй (для расширения возможностей ввёл возможность выбоа показать главное окно вконце или нет
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h> 
 
void main() 
{ 
    HWND hWnd = GetForegroundWindow();
    ShowWindow(hWnd,SW_HIDE);//Прячем консоль
    //Светим меседжбокс
    if(MessageBox(hWnd,"OK - Показать главное окно","Сделайте выбор", MB_OKCANCEL) == 1) 
        ShowWindow(hWnd,SW_SHOW);//Светим консоль
}
1
Вложения
Тип файла: rar MsgBox.exe.rar (7.7 Кб, 51 просмотров)
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
31.08.2011, 13:53  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h> 
 
void main() 
{ 
        HWND hWnd = GetForegroundWindow();
        ShowWindow(hWnd,SW_HIDE);//Прячем консоль
        //Светим меседжбокс
        if(MessageBox(hWnd,L"OK - Показать главное окно",L"Сделайте выбор", MB_OKCANCEL) == 1) 
                ShowWindow(hWnd,SW_SHOW);//Светим консоль
}
Спасибо,только в Visual Studio 2010 на добавить L :L"OK - Показать главное окно",L"Сделайте выбор"

Добавлено через 1 минуту
Но всётаки можно ли сделать чистый MessageBox без окна???
0
-=ЮрА=-
Заблокирован
Автор FAQ
31.08.2011, 14:29 #4
Цитата Сообщение от MaxxximyM Посмотреть сообщение
Но всётаки можно ли сделать чистый MessageBox без окна???
- а тут где окно???Для простоты запиши вот так тогда

C++
1
2
3
4
5
6
7
8
9
#include <windows.h> 
 
void main() 
{ 
        HWND hWnd = GetForegroundWindow();
        ShowWindow(hWnd,SW_HIDE);//Прячем консоль
        //Светим меседжбокс
        MessageBox(hWnd,L"Message text",L"Caption text", MB_OK); 
}
Пробуй
Окно мигнёт в сама начале на долю секунды, и то если ты успеешь его увидеть, по другому думаю не выйдет
0
alkagolik
Заблокирован
31.08.2011, 15:06 #5
Цитата Сообщение от MaxxximyM Посмотреть сообщение
Но всётаки можно ли сделать чистый MessageBox без окна???
я, например, не понимаю вопроса. MessageBox() это и есть окно. Нужно создать проект Win32 просто. Листинг 1.1 Юрий Щупак "Win32Api эффективная разработка приложений" Питер 2007.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <windows.h>
 
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
 
    LPSTR lpCmdLine, int nCmdShow)
 
{
 
    MessageBox(NULL, "Hello, Win32 world!", "Hello from Message Box", MB_OK);
 
    return 0;
 
}
2
-=ЮрА=-
Заблокирован
Автор FAQ
31.08.2011, 15:19 #6
Цитата Сообщение от alkagolik Посмотреть сообщение
"Win32Api
- как не консольный вариант, я даже и не подумал...
0
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
31.08.2011, 18:59 #7
Недавно совсем тема была
FreeConsole
0
-=ЮрА=-
Заблокирован
Автор FAQ
31.08.2011, 19:59 #8
Цитата Сообщение от easybudda Посмотреть сообщение
FreeConsole
- т.е вбить перед меседжбоксом и всё?
0
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
31.08.2011, 20:23 #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
т.е вбить перед меседжбоксом и всё?
ага
C
1
2
3
4
5
6
7
#include <windows.h>
 
int main(void){
    FreeConsole();
    MessageBoxA(NULL, "Yo-ho-ho", "Message", MB_OK);
    return 0;
}
2
-=ЮрА=-
Заблокирован
Автор FAQ
31.08.2011, 21:58 #10
FreeConsole(); как и AllocConsole - никогда не юзал, да уж минус мне...
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
01.09.2011, 01:00 #11
Хм. Интересно. Очень интересно.
А что, никто не знает, что в настройках IDE есть пункт типа "компоновщик-> не создавать консольное окно"? В DEV C++ есть точно.

.........................................................................................................................

ТС, чтобы создавать или не создавать консольное окно, для этого в файловом заголовке надо поправить всего одно поле, Subsystem
Хочешь правь вручную, в hex-редактое
...Вот так оно правится программно, запускаешь прогу, вводишь имя экзешника и нужное значение поля; после чего консольное окно либо создаётся либо нет. Подробности смотри в "формат PE- файлов"

Код неаккуратный даже для меня ну да я давно-давно писал подобное а щас на скорую руку переделал, дабы только лишь сохранить функционал.
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <windows.H>
#include <stdio.H>
#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + ((PIMAGE_DOS_HEADER)a)->e_lfanew))
typedef IMAGE_OPTIONAL_HEADER OptionalHeader; 
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Эта функция будет находить нам размер файла и его возвращать. 
long int razmer_faila (char* falis_name) {
 
 long int Razmer_Faila;
 HANDLE hFile;
 
 hFile = CreateFile(falis_name,
                       0,
                     FILE_SHARE_READ, 
                     NULL,
                     OPEN_EXISTING, 
                     FILE_ATTRIBUTE_NORMAL, 
                     NULL);
 
 //Проверяем, нормалено файл открыт или нет
 if (hFile== INVALID_HANDLE_VALUE) {
  return 0;
 }
 Razmer_Faila= (long int)GetFileSize(hFile, 0);
 CloseHandle (hFile);
 return Razmer_Faila; 
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
 
int main () {
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
                                //+ + +
 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!перегоняем файл в строку!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 char falis_name [MAX_PATH];
 long int Razmer_Faila;
 
 
 //Первое, что сделааем, это введём имя файла, который будем перегонять в строку:
 //Ввод имени файла:
 printf ("Вводи имя экзешника\n");
 if (!gets (falis_name)) {
  printf ("проблема с вводом имени экзешника\n");
  system ("pause");
  return 0;   
 }       
 
 //Теперь находим размер файла
 if (!(Razmer_Faila= razmer_faila (falis_name))) {
  printf ("не получилось найти размер экзешника\n");
  system ("pause");
  return 0;
 }
 
 
 //Теперь открываем файл на чтение
 FILE* f;
 if (!(f= fopen (falis_name, "rb"))) {
  printf ("экзешник на чтение не открыт\n");
  system ("pause");
  return 0; 
 }  
 
 //Теперь переписываем файл в строку нужного размера. ДЛя этого такую строку надо выделить
 //unsigned char* stroka_dla_faila= new unsigned char [Razmer_Faila+ 1]; 
 unsigned char* stroka_dla_faila= new unsigned char [Razmer_Faila]; 
 
 
 //И собсно запись файла в эту строку
 if (fread (stroka_dla_faila, 1, Razmer_Faila, f)<Razmer_Faila) {
  printf ("не удалось считать экзешник в строку\n");
  system ("pause");
  return 0;
 }
 
 fclose (f);
 
 
 //Потом не забыть вернуть память оси с помощью delete 
 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!конец перегоняем файл в строку!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 
PIMAGE_NT_HEADERS pPE=(PIMAGE_NT_HEADERS)NTSIGNATURE((long)stroka_dla_faila);
 
 
printf ("Теперь вводи число 2 или 3,если введёшь 2, то консоли создаваться не будет,\
 а если 3, то будет\n");
 
scanf ("%d",&(pPE->OptionalHeader.Subsystem));
 
//Перегоним строку в файл
if (!(f= fopen (falis_name, "wb"))) {
 printf ("файл на запись не открыт\n");
 system ("pause");
 return 0; 
}  
 
fwrite (stroka_dla_faila, 1, Razmer_Faila, f); 
delete [] stroka_dla_faila;
fclose (f);
getchar ();
 return 0;
}
2
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
01.09.2011, 01:04 #12
Цитата Сообщение от kravam Посмотреть сообщение
А что, никто не знает, что в настройках IDE есть пункт типа "компоновщик-> не создавать консольное окно"? В DEV C++ есть точно.
Видимо, удивлю, но не все IDE пользуются. К тому же...
Цитата Сообщение от kravam Посмотреть сообщение
Хочешь правь вручную, в hex-редактое
мы простых путей не ищем, ага. Добавить вызов одной функции в начале программы - это не по-джедайски!
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
01.09.2011, 01:08 #13
...А, соврал, не файловом, а в опциональном заголовке.

Добавлено через 3 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
Видимо, удивлю, но не все IDE пользуются. К тому же...

мы простых путей не ищем, ага. Добавить вызов одной функции в начале программы - это не по-джедайски!
Всё так. По джедайски, раз уж вы IDE не пользуетесь, найти опции компилятора, которые не создавали (создавали) бы окно и компилить с ними.
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.09.2011, 01:20 #14
Самый нормальный способ это изначально создать правильный тип приложения, зачем скрывать, от чего можно избавится вообще?
1
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
01.09.2011, 01:44 #15
Если g++, то:
C++
1
g++ -mwindowsn proga.cpp
не создаётся консольное окно
C++
1
g++ proga.cpp
создаётся консольное окно

Добавлено через 3 минуты
Вот так надо
C++
1
-mwindows
...Редактировать код одно мучение
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2011, 01:44
Привет! Вот еще темы с ответами:

MessageBox ошибка - C++
Бред какой-то..... Компилирую код и выдает ошибки. CodeWarrior 7.0. C++. //12.1 - The Message Box Program - Mark Lee - Prima...

заменить MessageBox на ... - C++
#define _WIN32_WINNT 0x0500 #include&lt;fstream&gt; #include&lt;windows.h&gt; #include&lt;iostream&gt; using namespace std; ofstream...

трабла с MessageBox - C++
Вот такая вот задачка сначала задается текст в ANSI ,затем его конвертируем в UNICODE и должны вывести его 3 способами - через _tprintf ,...

MessageBox выводит иероглифы - C++
MessageBox(NULL, reinterpret_cast&lt;LPCTSTR&gt;(&quot;Hello world&quot;), reinterpret_cast&lt;LPCTSTR&gt;(&quot;windows&quot;), MB_OK); Почему вместо строк Hello world...


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

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

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