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

MessageBox - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.92
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
31.08.2011, 13:35     MessageBox #1
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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2011, 13:35     MessageBox
Посмотрите здесь:

MessageBox ошибка C++
C++ заменить MessageBox на ...
MessageBox C++
C++ messagebox()
C++ [C++ WINAPI] MessageBox
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
31.08.2011, 13:50     MessageBox #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);//Светим консоль
}
Вложения
Тип файла: rar MsgBox.exe.rar (7.7 Кб, 50 просмотров)
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
31.08.2011, 13:53  [ТС]     MessageBox #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 без окна???
-=ЮрА=-
Заблокирован
Автор FAQ
31.08.2011, 14:29     MessageBox #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); 
}
Пробуй
Окно мигнёт в сама начале на долю секунды, и то если ты успеешь его увидеть, по другому думаю не выйдет
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
31.08.2011, 15:06     MessageBox #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;
 
}
-=ЮрА=-
Заблокирован
Автор FAQ
31.08.2011, 15:19     MessageBox #6
Цитата Сообщение от alkagolik Посмотреть сообщение
"Win32Api
- как не консольный вариант, я даже и не подумал...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
31.08.2011, 18:59     MessageBox #7
Недавно совсем тема была
FreeConsole
-=ЮрА=-
Заблокирован
Автор FAQ
31.08.2011, 19:59     MessageBox #8
Цитата Сообщение от easybudda Посмотреть сообщение
FreeConsole
- т.е вбить перед меседжбоксом и всё?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
31.08.2011, 20:23     MessageBox #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;
}
-=ЮрА=-
Заблокирован
Автор FAQ
31.08.2011, 21:58     MessageBox #10
FreeConsole(); как и AllocConsole - никогда не юзал, да уж минус мне...
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
01.09.2011, 01:00     MessageBox #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;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
01.09.2011, 01:04     MessageBox #12
Цитата Сообщение от kravam Посмотреть сообщение
А что, никто не знает, что в настройках IDE есть пункт типа "компоновщик-> не создавать консольное окно"? В DEV C++ есть точно.
Видимо, удивлю, но не все IDE пользуются. К тому же...
Цитата Сообщение от kravam Посмотреть сообщение
Хочешь правь вручную, в hex-редактое
мы простых путей не ищем, ага. Добавить вызов одной функции в начале программы - это не по-джедайски!
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
01.09.2011, 01:08     MessageBox #13
...А, соврал, не файловом, а в опциональном заголовке.

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

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

Добавлено через 3 минуты
Вот так надо
C++
1
-mwindows
...Редактировать код одно мучение
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
01.09.2011, 06:13     MessageBox #16
Цитата Сообщение от kravam Посмотреть сообщение
А что, никто не знает, что в настройках IDE есть пункт типа "компоновщик-> не создавать консольное окно"?
MSVS 2008
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
01.09.2011, 10:33     MessageBox #17
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
зачем скрывать, от чего можно избавится вообще?
Под виндой програмки с окошками на gtk+ при запуске из проводника открывают пустое консольное окно, которое просто висит (ну ещё можно с помощью gprint() в него выводить что-нибудь). Есть, наверное, более кошерный способ это самое окно не открывать, но я его пока не нашёл. А писать WinMain в качестве точки входа как-то не хочется, хотя может так и правильнее было бы...

Добавлено через 22 минуты
ух, ты, а в правду -mwindows достаточно, чтоб окно не создавалось...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2011, 13:08     MessageBox
Еще ссылки по теме:

MessageBox API C++
Закрытия MessageBox C++
Вывод messagebox C++

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

Или воспользуйтесь поиском по форуму:
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
01.09.2011, 13:08  [ТС]     MessageBox #18
Всем спасибо,я так и хотел чтобы вылетало окошко MessageBoxа без окна командной строки.Тема закрыта.
Yandex
Объявления
01.09.2011, 13:08     MessageBox
Ответ Создать тему
Опции темы

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