Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SetFocus на EditBox 
:(
    Опции темы
CityAC
Дата 28.12.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



Подскажите как установить фокус на EditBox, чтобы он устанавливался по умолчанию, если диалог создается из родительского окна с помощью DoModal?

Понимаю что SetFocus(), а куда еговпихнуть?

// жду у экрана :-(
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
CityAC
Дата 28.12.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



И еще.
Как из дочернего окна вернуть в родительское объект класса CString?
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
zkv
Дата 28.12.2006, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(CityAC @  28.12.2006,  21:50 Найти цитируемый пост)
а куда еговпихнуть?

в OnInitDialog() диалога

Цитата(CityAC @  28.12.2006,  22:13 Найти цитируемый пост)
Как из дочернего окна вернуть в родительское объект класса CString? 

смотря когда вернуть, на примере диалога: если надо вернуть по завершении диалога, то просто создаем член-данное типа CString в классе диалога, в процессе работы диалога кладем туда то что нам нужно, а по завершении достаем. Если же объект хочется получить не завершая диалог, то все немного сложнее, один из вариантов - сделать диалог не модальным (метод Create() ), другой обмениваться используя механизм сообщений.
Вообщем уточняй задачу.
PM MAIL   Вверх
CityAC
Дата 28.12.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



Вы писали:
смотря когда вернуть, на примере диалога: если надо вернуть по завершении диалога, то просто создаем член-данное типа CString в классе диалога, в процессе работы диалога кладем туда то что нам нужно, а по завершении достаем.

Положить то я положил, а как достаем?
Где мы возвращаем этот объект?

Да и это тоже не помагает

Код

BOOL CCreateFileDlg::OnInitDialog()
{
    GetDlgItem(IDC_EDIT_CreateFile)->SetFocus();
    CDialog::OnInitDialog();
    
    return TRUE;
}

--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
zkv
Дата 29.12.2006, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



1. 
Код

//где-то во вне...
СMyDlg : public CDialog 
{
//...
public://можно конечно private, только придется метод добавить, который возвращать m_myString
CString m_myString; //о чем собственно говорилось
//...
};

//где-то, где вызываем диалог
СMyDlg myDlg;
myDlg.DoModal(); //вызываем модальный диалог, в нем переменной m_myString должно быть присвоено нечто полезное, ждемс...
//тут диалог уже завершился, можно забирать m_myString
CString myExternalString = myDlg.m_myString;


2.
хм, у меня тоже SetFocus() не работает smile, ну не знаю почему, может кто подскажет?
Ну не беда, решить можно так:
Код

BOOL CMyDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    // TODO: Add extra initialization here
     PostMessage(WM_NEXTDLGCTL,(WPARAM)GetDlgItem(IDC_EDIT1)->m_hWnd,TRUE);
    return TRUE;  // return TRUE  unless you set the focus to a control
}


 
PM MAIL   Вверх
Earnest
Дата 29.12.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Насчет установки фокуса в OnInitDialog: просто делаем SetFocus куда надо и возвращаем FALSE.


--------------------
...
PM   Вверх
CityAC
Дата 29.12.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1




Цитата

Насчет установки фокуса в OnInitDialog: просто делаем SetFocus куда надо и возвращаем FALSE.


Спасибо, Earnest, Ваши советы как всегда работают!!!
Цитата

Код

//где-то, где вызываем диалог
СMyDlg myDlg;
myDlg.DoModal(); //вызываем модальный диалог, в нем переменной m_myString должно быть присвоено нечто полезное, ждемс...
//тут диалог уже завершился, можно забирать m_myString
CString myExternalString = myDlg.m_myString


Спа! вот что значит ночью сидеть - ларчик то просто открывался!
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
CityAC
Дата 29.12.2006, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



А как edit box сделать неактивным, т.е. затемнить?
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
zkv
Дата 29.12.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(CityAC @  29.12.2006,  12:03 Найти цитируемый пост)
А как edit box сделать неактивным, т.е. затемнить? 

EnableWindow(), удобнее для контролов диалога завести управляющие переменный, правой мышью по контролу -> add variable, добавляем, тогда действие будет  выглядеть так:
Код

m_myEdit.EnableWindow( ); 
m_myEdit.EnableWindow( FALSE ); 

PM MAIL   Вверх
CityAC
Дата 29.12.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



Чем дальше в лес тем толще партизаны:-))
Вопросы не заканчиваются.
Хочу создать файл списка последних открываемых файлов

Код

HANDLE hRecFile;
    DWORD written;
hRecFile = CreateFile("res\\recentfiles.dat", GENERIC_WRITE,NULL, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(hRecFile,m_CreateFileString,256,&written,NULL);

Не работает как нужно.
У меня только первая запись записывается(получается, что при создании файла).
А во второй раз для записи файл не открывается.
Открыть его нужно этой же функцией.
Выходит, что нужны параметры, чтобы и создать файл и добавить в него данные в следующий раз.

Это сообщение отредактировал(а) CityAC - 29.12.2006, 17:52
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
zkv
Дата 29.12.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(CityAC @  29.12.2006,  17:28 Найти цитируемый пост)
Чем дальше в лес тем толще партизаны:-))

это нормально

Цитата(CityAC @  29.12.2006,  17:28 Найти цитируемый пост)
Хочу создать файл списка последних открываемых файлов

я думаю список не займет очень уж много места, поэтому может сделать так: создать список в дин. памяти, при начале работы программы считывать его из файла, а по завершении программы сохранять в файл.
если этот вариант вас устраивает, то надо определиться, что использовать, если вы не против использования стандартной библиотеки, то удобно использовать std::vector для хранения списка и std::fstream для работы с файлом. Но можно обойтись и средствами MFC - используем CArray и CFile, соответственно. 
Больше сказать пока нечего, конкретизируйте вопрос. Удачи! smile

PM MAIL   Вверх
CityAC
Дата 29.12.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



Наверно так и попробую, но вопрос остается открытым:
Что то не так с параметрами CreateFile, может кто разберется?
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
zkv
Дата 29.12.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(CityAC @  29.12.2006,  17:28 Найти цитируемый пост)
У меня только первая запись записывается(получается, что при создании файла).
А во второй раз для записи файл не открывается.
Открыть его нужно этой же функцией.

примерчик:
Код

//когда открываем первый раз
HANDLE hRecFile;
DWORD written;
hRecFile = CreateFile(L"recentfiles.dat", GENERIC_WRITE,NULL,  NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
const char str[]= "something";
WriteFile(hRecFile, str, strlen( str ), &written, NULL);
CloseHandle( hRecFile ); //пока не закроем еще раз не откроется

//...
//когда надо дописать что то
HANDLE hRecFile;
hRecFile = CreateFile(L"recentfiles.dat", GENERIC_WRITE,NULL, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
SetFilePointer( hRecFile, 0, NULL, FILE_END );
const char str1[]= "something else";
WriteFile(hRecFile, str1, strlen( str1 ), &written, NULL);
CloseHandle( hRecFile );
 
PS конечно надо все контролировать на ошибки еще...

Добавлено @ 23:10 
Цитата(Earnest @  29.12.2006,  10:50 Найти цитируемый пост)
Насчет установки фокуса в OnInitDialog: просто делаем SetFocus куда надо и возвращаем FALSE. 


Earnest, это баг, или так было задумано? Если задумано, то в чем глубокий смысл?

Это сообщение отредактировал(а) zkv - 29.12.2006, 23:07
PM MAIL   Вверх
CityAC
Дата 30.12.2006, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



Цитата(zkv @ 29.12.2006,  23:06)


Earnest, это баг, или так было задумано? Если задумано, то в чем глубокий смысл?

Чеза баг у меня это работает.
Да потом я и мсдн это вычитал.
возращаем фальш , что означает, что фокус не должен устанавливаться не на первый контрол диалога, а туда куда нам надо

Это сообщение отредактировал(а) CityAC - 30.12.2006, 00:53
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
zkv
Дата 30.12.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(CityAC @  30.12.2006,  00:45 Найти цитируемый пост)
Да потом я и мсдн это вычитал.
Спасибо, я как то не догадался в МСДН заглянуть smile 
ну как там файлы поживают? smile

Это сообщение отредактировал(а) zkv - 30.12.2006, 00:54
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.5175 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.