Помогите новичку
2 - Как выбрать последовательность компонентов, по переходу по табу
3 - Как запретить закрытие формы при нажатие ентера и ескейпа?
1 - Как уменьшить размер шрифта в Edit и высоту Edit'a
2 - Как выбрать последовательность компонентов, по переходу по табу
3 - Как запретить закрытие формы при нажатие ентера и ескейпа?
1 - Вместо Edit используй RichEditControl, только его надо инициализировать до отображения диалога (функция AfxInitRichEdit( );). Тут со шрифтом можешь делать все что хочешь (тип шрифта, размерь подчеркивать, наклонять, делать жирным). А так в простом едите используется системный шрифт. Размеры элементов изменяются в редакторе диалоговых окон.
2 - Последовательность обхода задается в редакторе диалогового окна CTRL-D и потом кликаешь на элементы в порядке обхода.
3 - на IDOK и IDCANCEL создаешь свои обработчики где делаешь передачу данных или просто закрытие диалога (если тела функций оставить пустыми - то диалог не закроется при нажатии на кнопки), главное убрать стандартные вызовы CDialog::OnCancel(); и CDialog::OnOK();.
1 - Вместо Edit используй RichEditControl, только его надо инициализировать до отображения диалога (функция AfxInitRichEdit( );). Тут со шрифтом можешь делать все что хочешь (тип шрифта, размерь подчеркивать, наклонять, делать жирным). А так в простом едите используется системный шрифт. Размеры элементов изменяются в редакторе диалоговых окон.
2 - Последовательность обхода задается в редакторе диалогового окна CTRL-D и потом кликаешь на элементы в порядке обхода.
3 - на IDOK и IDCANCEL создаешь свои обработчики где делаешь передачу данных или просто закрытие диалога (если тела функций оставить пустыми - то диалог не закроется при нажатии на кнопки), главное убрать стандартные вызовы CDialog::OnCancel(); и CDialog::OnOK();.
А как зделать так, что б при закрытие формы(нажатие на крестик :-) ) форма закрывалась, а при нажатие ескейп, она не закрывалася. Ну може я плохо выразился, но думаю вы меня поймёте.
А как зделать так, что б при закрытие формы(нажатие на крестик :-) ) форма закрывалась, а при нажатие ескейп, она не закрывалася. Ну може я плохо выразился, но думаю вы меня поймёте.
Ну вообще ескейп является по сути отменой ( тот же крестик ). Возможно не надо перегружать OnCancel() окна. Создай MsgProc ( в класс-визарде можно ), а там перехвати нажатие ескейпа и никому сообщение не отдавай. Только ескейп КАЖИСЬ надо перехватывать так
WindowProc( hWnd, uMsg, wParam, lParam )
{
BOOL doNothing = FALSE;
switch( uMsg )
{
case WM_COMMAND
switch( LOWORD(wParam) )
{
case VK_ESCAPE
{
doNothing = TRUE; //ничего не делаем
}//case VK_ESCAPE
}//switch( LOWORD(wParam) )
}//switch( uMsg )
if ( !doNothing ) return DefWindowProc( hWnd, uMsg, wParam, lParam );
return TRUE;
Я такое вроде где-то писал, но точно сказать заработает это или нет сказать не могу.
А как зделать так, что б при закрытие формы(нажатие на крестик :-) ) форма закрывалась, а при нажатие ескейп, она не закрывалася. Ну може я плохо выразился, но думаю вы меня поймёте.
А разве нельзя в Class Wizard'е поставить обработку сообщения WM_KEYDOWN у класса диалога? У клавиши Esc nChar=27, а дальше...
if (nChar == 27){
Любые действия при Esc
}
По-моему так должно работать.
А разве нельзя в Class Wizard'е поставить обработку сообщения WM_KEYDOWN у класса диалога? У клавиши Esc nChar=27, а дальше...
if (nChar == 27){
Любые действия при Esc
}
По-моему так должно работать.
Неужели ВСЕ на этом форуме пишут такие проги, какие закрываются по Esc'y и Enter'y, что-то я неверю.
А попробуй это попробуй то, я задал вполне простой вопрос, а не тему, на которую нужно много философствывать в поиске оптимального варианта....
Ну вообще ескейп является по сути отменой ( тот же крестик ). Возможно не надо перегружать OnCancel() окна. Создай MsgProc ( в класс-визарде можно ), а там перехвати нажатие ескейпа и никому сообщение не отдавай. Только ескейп КАЖИСЬ надо перехватывать так
WindowProc( hWnd, uMsg, wParam, lParam )
{
BOOL doNothing = FALSE;
switch( uMsg )
{
case WM_COMMAND
switch( LOWORD(wParam) )
{
case VK_ESCAPE
{
doNothing = TRUE; //ничего не делаем
}//case VK_ESCAPE
}//switch( LOWORD(wParam) )
}//switch( uMsg )
if ( !doNothing ) return DefWindowProc( hWnd, uMsg, wParam, lParam );
return TRUE;
Я такое вроде где-то писал, но точно сказать заработает это или нет сказать не могу.
Спасибо, проверю, если сработает объязательно скажу!
Неужели ВСЕ на этом форуме пишут такие проги, какие закрываются по Esc'y и Enter'y, что-то я неверю.
А попробуй это попробуй то, я задал вполне простой вопрос, а не тему, на которую нужно много философствывать в поиске оптимального варианта....
Используй не диалоговую форму :)
Используй не диалоговую форму :)
Подскажи какую и как, яж всётаки нровичёк...
Неужели ВСЕ на этом форуме пишут такие проги, какие закрываются по Esc'y и Enter'y, что-то я неверю.
А попробуй это попробуй то, я задал вполне простой вопрос, а не тему, на которую нужно много философствывать в поиске оптимального варианта....
Попробуй ещё и это:
ClassWizard->Massage Maps->Class Name->(в списке)твой класс диалога->Object IDs->(в списке)твой класс диалога->Massages->(в списке)PreTranslateMessage->Add Function->Edit Code
Перед оператором
return CDialog::PreTranslateMessage(pMsg);
вставляешь:
if(pMsg->message == WM_KEYDOWN )
{
if(pMsg->wParam == VK_ESCAPE )
ShowWindow(SW_SHOW);
return TRUE;
}
Только не забудь в OnCancel() вернуть строку:
CDialog::OnCancel ();
если ты её раньше удалил.
P.S. Или так:
if(pMsg->message == WM_KEYDOWN &&
pMsg->wParam == VK_ESCAPE)
{
return FALSE;
}
Попробуй ещё и это:
ClassWizard->Massage Maps->Class Name->(в списке)твой класс диалога->Object IDs->(в списке)твой класс диалога->Massages->(в списке)PreTranslateMessage->Add Function->Edit Code
Перед оператором
return CDialog::PreTranslateMessage(pMsg);
вставляешь:
if(pMsg->message == WM_KEYDOWN )
{
if(pMsg->wParam == VK_ESCAPE )
ShowWindow(SW_SHOW);
return TRUE;
}
Только не забудь в OnCancel() вернуть строку:
CDialog::OnCancel ();
если ты её раньше удалил.
Ну кажется всё тебе рассказали кроме размера шрифта. Это просто:
CFont font;
BOOL CMyDlg::OnInitDialog()
{
...........................
CFont* pFont = m_Edit.GetFont();
if(pFont)
{
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
pFont->GetLogFont(&lf);
lf.lfHeight = 20; //Здесь устанавливаем высоту
font.CreateFontIndirect(&lf);
m_Edit.SetFont(&font, TRUE);
}
.......................
}
Ну кажется всё тебе рассказали кроме размера шрифта. Это просто:
CFont font;
BOOL CMyDlg::OnInitDialog()
{
...........................
CFont* pFont = m_Edit.GetFont();
if(pFont)
{
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
pFont->GetLogFont(&lf);
lf.lfHeight = 20; //Здесь устанавливаем высоту
font.CreateFontIndirect(&lf);
m_Edit.SetFont(&font, TRUE);
}
.......................
}
А как выбрать последовательность перехода по табу?
про табуляцию я уже писал.
Открываешь в рабочей области нужный диалог, и нажимаешь "CTRL + D". Все элементы управления пронумеруются. Выбираешь их в нужном порядке и все ОК. Вот только не знаю как это сделать на эл. упр. созданные ручками (через Create). Если кто знает, напишите.
Открываешь в рабочей области нужный диалог, и нажимаешь "CTRL + D". Все элементы управления пронумеруются. Выбираешь их в нужном порядке и все ОК. Вот только не знаю как это сделать на эл. упр. созданные ручками (через Create). Если кто знает, напишите.
Выбор формы зависит от того, что ты хочешь делать в своей программе - для чего она предназначена. Диалоговая форма - получение информации от пользователя и простой вывод информации. форма, наследница от CView, например, предназначена для вывода сложной информации, ввод в ней идет через меню и вызов диалоговых окон, или от кликов на экране.
про табуляцию я уже писал.
Извени что я не заметил, прсто у меня иногда этот форум не хочит грузится, наверно проблемы с инетом.
Большое спасибо тебе и Alex_Odessa