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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2010, 23:27   #1
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию MessageBox - переименовать кнопки

Добрый вечер. Есть ли возможность в с++ переименовать стандартные кнопки в MessageBox, к примеру: MB_YESNOCANCEL - получить "Пробуем, Не пробуем, Отложить вопрос"


Заранее благодарен.
iskurt вне форума Ответить с цитированием
Старый 18.06.2010, 23:43   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у MessageBox нет такой возможности.

создайте свое окно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.06.2010, 20:50   #3
Oleg_SK
Пользователь
 
Регистрация: 06.06.2010
Сообщений: 42
По умолчанию

Посмотри вот эту статью: http://www.catch22.net/tuts/custom-messagebox (правда она на инглише, но там есть пример кода), там описывается как это сделать... В кратце: нужно поставить оконный хук с помощью Win32 API-функции: SetWindowsHookEx. Изменять надписи на нужных кнопках можно в функции хука. Думаю, стоит привести пример кода из указанной статьи здесь:

Код:
//
//	MsgBoxEx - how to customize a standard message box
//	Written by J Brown 2002
//	Freeware
//

#include <windows.h>
#include <tchar.h>

TCHAR szContents[] = _T("Windows will now wipe your harddisk!");
TCHAR szTitle[]    = _T("Hello");

HHOOK hMsgBoxHook;

LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	TCHAR ach[40];
	HWND hwnd;
	HWND hwndButton;

	if(nCode < 0)
		return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);

	switch(nCode)
	{
	case HCBT_ACTIVATE:

		// Get handle to the message box!
		hwnd = (HWND)wParam;

		SetWindowText(hwnd, _T("Message from Bill"));

		hwndButton = GetDlgItem(hwnd, IDOK);
		SetWindowText(hwndButton, _T("Thankyou"));
		
		return 0;

	}

	return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);
}


int MsgBoxEx(HWND hwnd, TCHAR *szText, TCHAR *szCaption, UINT uType)
{
	int retval;

	// Install a window hook, so we can intercept the message-box
	// creation, and customize it
	hMsgBoxHook = SetWindowsHookEx(
		WH_CBT, 
		CBTProc, 
		NULL, 
		GetCurrentThreadId()			// Only install for THIS thread!!!
		);

	// Display a standard message box
	retval = MessageBox(hwnd, szText, szCaption, uType);

	// remove the window hook
	UnhookWindowsHookEx(hMsgBoxHook);

	return retval;
}


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd)
{
	// Just display a standard message box.
	// It doesn't matter that we have no parent window or a
	// message-loop, because MessageBox has it's own message loop.

	MsgBoxEx(NULL, szContents, szTitle, MB_OK | MB_ICONSTOP);
		
	return 0;
}
В результате работы данной программы на экран будет выведен MessageBox, в котором в кнопке будет надпись "Thankyou".

Последний раз редактировалось Oleg_SK; 20.06.2010 в 04:51.
Oleg_SK вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переименовать временную таблицу ymka2 SQL, базы данных 1 30.12.2009 11:23
TP. Как переименовать файл? TwiX Помощь студентам 2 14.12.2009 18:48
Переименовать папку Inbox Общие вопросы Delphi 17 01.02.2009 07:34
как переименовать samosval Общие вопросы .NET 1 19.12.2007 21:40
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35