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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2009, 10:35   #1
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
Радость CfileDialog и возник глюк

Привет. При работе с CFileDialog возник глюк диалога.
вызывается СейвДиалог, далее при выборе какой-либо файла в диалоге - программа вместе с диалогом уходят в другой мир. короче закрывается.Даже по кнопе "сохранить" не клЫкал .

Код:
void CVerticalTreeDlg::OnBnClickedButton5()
{
	CString defext="txt", filter="Text file|*.txt||";
	CFileDialog fSaveDlg(false,defext, NULL, OFN_HIDEREADONLY|OFN_PATHMUSTEXIST, filter, this);
	if(fSaveDlg.DoModal()==IDOK)
	{	
        EDITSTREAM es;
		CString path=fSaveDlg.GetPathName();
	    CFile cFile(path,CFile::modeCreate|CFile::modeWrite);
        
        es.dwCookie = (DWORD) &cFile;
	    es.pfnCallback =FileStreamOutCallback; 
	    m_richedit.StreamOut(SF_TEXT|SF_UNICODE , es);	
	}
}
Самое странное: глюк возникает не всегда, но довольно часто.
Спасибо за внимание, ждем ваших ответов!

Последний раз редактировалось nusik; 28.08.2009 в 11:18.
nusik вне форума Ответить с цитированием
Старый 28.08.2009, 11:05   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
LPTSTR  lpszPath;
delete lpszPath;
пытаешься очистить память недействительного указателя.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 28.08.2009, 11:17   #3
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Цитата:
пытаешься очистить память недействительного указателя.
Это лишний ненужный код. Исправил. На проблему естественно никак не повлияло. Это мусор остался от моих экспериментов

Последний раз редактировалось nusik; 28.08.2009 в 11:22.
nusik вне форума Ответить с цитированием
Старый 28.08.2009, 11:19   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2nusik значит выложи НЕлишний, нужный код, который у тебя НЕ работает!
Я убрал этот указатель, + все упоминания ричэдита (ты не соизволил предоставить нормальный, компилирующийся код), все работает.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 28.08.2009, 11:37   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

значит проблема в ричэдите.
Цитата:
es.dwCookie = (DWORD) &cFile;
Цитата:
dwCookie
Specifies an application-defined value that the rich edit control passes to the EditStreamCallback callback function specified by the pfnCallback member.
чего ты хотел добиться, положив в эту переменную указатель на мфцшный файл? + неплохо было бы показать твою функцию FileStreamOutCallback
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 28.08.2009, 11:44   #6
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Код:
DWORD CALLBACK CVerticalTreeDlg::FileStreamOutCallback(DWORD dwCookie, 
  LPBYTE pbBuf, LONG cb, LONG *pcb)
{
  CFile *pFile = (CFile*) dwCookie;
  pFile->Write(pbBuf,cb);
  *pcb = cb;
  return 0;
}
Цитата:
чего ты хотел добиться, положив в эту переменную указатель на мфцшный файл?
скажу честно : НЕзнаю, код скопипейстанутый.

Цитата:
dwCookie
Specifies an application-defined value that the rich edit control passes to the EditStreamCallback callback function specified by the pfnCallback member.
Я так понял что это просто необходимо.

Последний раз редактировалось nusik; 28.08.2009 в 11:52.
nusik вне форума Ответить с цитированием
Старый 28.08.2009, 11:55   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2nusik
ну вот теперь сразу понятно (вроде).
Цитата:
m_richedit.StreamOut(SF_TEXT|SF_UNI CODE , es);
Цитата:
CRichEditCtrl::StreamOut
The value of nFormat must be one of the following:

SF_TEXT Indicates writing text only.
SF_RTF Indicates writing text and formatting.
SF_RTFNOOBJS Indicates writing text and formatting, replacing OLE items with spaces.
SF_TEXTIZED Indicates writing text and formatting, with textual representations of OLE items.
Any of these values can be combined with SFF_SELECTION. If SFF_SELECTION is specified, StreamOut writes out the current selection into the output stream. If it is not specified, StreamOut writes out the entire contents of this CRichEditCtrl object.

In the EDITSTREAM parameter es, you specify a callback function which fills a buffer with text. This callback function is called repeatedly, until the output stream is exhausted.
уверен, что твой файл в уникодовской кодировке? Попробуй оставить просто SF_TEXT.
в мсдне есть нормальный пример с открытием rtf документа этим способом.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 28.08.2009, 11:58   #8
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Да в Юникоде.
И юникод мне необходим.
Цитата:
в мсдне есть нормальный пример с открытием rtf документа этим способом.
С юникодом?
nusik вне форума Ответить с цитированием
Старый 28.08.2009, 12:03   #9
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2nusik обычный rtf. я не знаю, с уникодом он там или нет. во всяком случае, в мсдне нет описание твоего уникодовского параметра, как ты и сам видишь

Цитата:
// My callback procedure that reads the rich edit control contents
// from a file.
static DWORD CALLBACK
MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;

pFile->Write(pbBuff, cb);
*pcb = cb;

return 0;
}

// The example code.
// The pointer to my rich edit control.
extern CRichEditCtrl* pmyRichEditCtrl;
// The file to store the contents of the rich edit control.
CFile cFile(TEXT("myfile.rtf"), CFile::modeCreate|CFile::modeWrite) ;
EDITSTREAM es;

es.dwCookie = (DWORD) &cFile;
es.pfnCallback = MyStreamOutCallback;
pmyRichEditCtrl->StreamOut(SF_RTF, es);
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 28.08.2009, 14:11   #10
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Отличается фактически только первым параметром стримаут-а.
Да и самое главное вначале поста я писал о том что нажатие кнопки не происходит То есть он выходит до того как я нажму на сохранить. Тоогда этого всего
Код:
if(fSaveDlg.DoModal()==IDOK)
	{	
        EDITSTREAM es;
		CString path=fSaveDlg.GetPathName();
	    CFile cFile(path,CFile::modeCreate|CFile::modeWrite);
        
        es.dwCookie = (DWORD) &cFile;
	    es.pfnCallback =FileStreamOutCallback; 
	    m_richedit.StreamOut(SF_TEXT|SF_UNICODE , es);	
	}
просто непроисходит.
Причем я на компе напарника проверил работает без глюков .
Мне кажется что это глюк в Винде.
Обновил винду. ща тестирую посмотрим на результат.
2pproger спасибо.

Последний раз редактировалось nusik; 28.08.2009 в 14:15.
nusik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возник вопрос при создании сайта Fortune55 Общие вопросы по Java, Java SE, Kotlin 1 06.04.2009 12:49
Глюк в опере Ozerich Софт 5 18.01.2009 13:45
Возник вопрос при заполнении массива.. SnakeMan Помощь студентам 8 15.01.2008 12:31
Глюк )) theos О форуме и сайтах клуба 9 08.01.2008 17:44