Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение файла в richedit 
:(
    Опции темы
Tror
Дата 22.11.2005, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Пытаюсь прочитать файл richedit. Иногда всё в норме а иногда в конце
вылезают всякие кракозяблы.
Читаю файл следующим образом
Код

SetFilePointer(hFile, 0, 0, FILE_BEGIN);
    do
    {
        ReadFile(hFile, cBuff,  sizeof(cBuff), &dwBytesRead, NULL);
        SendMessage(hEditWnd, (UINT)EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)cBuff);
        ZeroMemory(cBuff,  sizeof(cBuff));
    }
    while (dwBytesRead != 0);


Может что неправильно делаю?
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Гость_Kris
Дата 22.11.2005, 22:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Попробуй вот так

Код

SetFilePointer(hFile, 0, 0, FILE_BEGIN);
    do
    {
        ReadFile(hFile, cBuff,  sizeof(cBuff), &dwBytesRead, NULL);
 [b]*(cBuff+dwBytesRead)=0;[/b]
        SendMessage(hEditWnd, (UINT)EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)cBuff);
        ZeroMemory(cBuff,  sizeof(cBuff));
    }
    while (dwBytesRead != 0);


  Вверх
Гость_Kris
Дата 22.11.2005, 23:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Точнее вот так smile

Код

DWORD ndx;

SetFilePointer(hFile, 0, 0, FILE_BEGIN);
    do
    {
        ReadFile(hFile, cBuff,  sizeof(cBuff), &dwBytesRead, NULL);
 *(cBuff+dwBytesRead)=0;

    ndx = GetWindowTextLength (hEditWnd);
    SendMessage (hEditWnd, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx);
    SendMessage(hEditWnd, EM_REPLACESEL, 0, (LPARAM) (TCHAR*) szLine);

   }
    while (dwBytesRead != 0);


  Вверх
Tror
Дата 23.11.2005, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вы меня, конечно, простите -- я не гуру С++.
Что делает строка
Цитата
*(cBuff+dwBytesRead)=0;

--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Aleksandor
Дата 23.11.2005, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


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

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



Тут такая штука. RichEdit ожидает что блок данных заканчивается нулем.

В приведенном примере
ReadFile(hFile, cBuff, sizeof(cBuff), &dwBytesRead, NULL);
читаются данные в cBuff , но нет гарантии что первый байт после данных будет 0
Строка *(cBuff+dwBytesRead)=0; записывает 0 сразу после блока данных, что исключает появление кракозябр smile

В примере тоже есть очистка ZeroMemory(cBuff, sizeof(cBuff));
но после первого считывания, а часто первое оно же и последнее единственное.

В редких случаях когда это не так вызываем
SendMessage (hEditWnd, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx);
SendMessage(hEditWnd, EM_REPLACESEL, 0, (LPARAM) (TCHAR*) cBuff);

Иначе в RichEdit'e появится только блок данных считанный последним









--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
Guest
Дата 23.11.2005, 14:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем спасибо, побежал пробовать
  Вверх
Tror
Дата 24.11.2005, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всё получилось, огромное спасибо, но вылезла другая проблемка.
При открытии файлов более 200к вылетает Buffer overrun
???????? smile
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
En_t_end
Дата 24.11.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Tror
Как мне кажется sizeof(CBuff) делает не то что вы предполагаете...
PM MAIL ICQ Skype GTalk Jabber   Вверх
Tror
Дата 24.11.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я предполагаю, что sizeof(CBuff) возвращает размер буфера, разве нет.
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Aleksandor
Дата 24.11.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


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

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



А откуда он взялся-то, этот cBuff? Его же надо выделить сначала, определиться с размером...



--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
Tror
Дата 24.11.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



у меня он определён как

char cBuff[1000]

может надо как-то по другому?
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Aleksandor
Дата 24.11.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


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

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



Ну вот, буффер всего 1000 байт, а ты хочешь впихнуть туда 200 000 (!)
Нужно выделять память соответственно размеру файла smile

Код

HANDLE hFile=CreateFile(szFileName, GENERIC_READ,0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
   if (hFile==INVALID_HANDLE_VALUE)  return FALSE;  
   
  DWORD length=GetFileSize(hFile,NULL);     // для файлов меньше 4 GB
 
  LPVOID lpvBase = VirtualAlloc(NULL,                 // system selects address
                         length,                                       //  TODO-  4K page guard!
                         MEM_RESERVE | MEM_COMMIT,          
                         PAGE_READWRITE);       
  if (lpvBase == NULL ) { CloseHandle(hFile); return FALSE; } 
  cBuff=(LPTSTR)lpvBase;  

//начало цикла
    do    {
        ReadFile(hFile,cBuff,length,&dwBytesRead,NULL);
        length-=dwBytesRead;     // на случай если не все прочитано за один проход

 // ..............делаем другие дела
}
//конец цикла

     CloseHandle(hFile);                      // очистка
     VirtualFree(lpvBase,0,MEM_RELEASE);  


Это сообщение отредактировал(а) Aleksandor - 24.11.2005, 15:39


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
Guest
Дата 24.11.2005, 16:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну зачем нам тогда нужен

length-=dwBytesRead;

если мы выделяем буфер размер которого равен размеру файла smile
  Вверх
Tror
Дата 24.11.2005, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну а если предположим памяти не хватит, разве нельзя прочитать файл кусками
тем же cBuff[1000] в цикле?
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Aleksandor
Дата 24.11.2005, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


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

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



Надо попробовать smile Но тогда уж лучше сделать буфер размером в сектор
char cBuff[4096+1]; Не забудь еще байтик для нуля-терминатора smile
Тут могут быть нюансы связанные с реализацией файлового менеджера smile
Кстати какая операционка стоит?
Код


do {

ReadFile(hFile,cBuff,4096,&dwBytesRead,NULL);
}
while (dwBytesRead==4096);




--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
Tror
Дата 24.11.2005, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



стоит XP prof

кстати или я чего-то недопер, но

while (dwBytesRead==4096)

прога прочитает первые 4096 и на этом чтение прекращается

--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Aleksandor
Дата 24.11.2005, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


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

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



Протестировал с файлом около 700 Кило smile
Все работает, но жуть как долго открывается файл. Лучше уж целиком читать.

Тут видимо ошибка в том что не учитывался дополнительный нулевой байт который дописываем в буфер, т.е. не sizeof(cBuff), a sizeof(cBuff-1)


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
Fixin
Дата 26.11.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



PM MAIL ICQ   Вверх
Tror
Дата 28.11.2005, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо большое, очень интересная статья smile
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Akeem
Дата 17.9.2006, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всё зделал как рекомендовал Tror о открытии фала в RichEdit (в темке о сохранении фолйа из RichEdit) Но возник вопрос. программа компилится без ошибок и выполняется также. Но всё равно из файла не достается данные и не выводятся в сам RichEdit.

Привожу код 

Код

HANDLE            hFile; 
                    DWORD            dwFileSize;     
                    DWORD            dwBytesRead;  
                    LPVOID            lpvBuff;   
                    char            *cBuff; 
                    char            szTmpBuff[100];  
                    
                    SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)"");
                    
                    //
                    //Вызов стандартного диалога открытия файла 
                    //
                    GetOpenFileName((tagOFNA *)"data.txt"); 
                    
                    //
                    //Попытка открытия файла  
                    //
                    hFile = CreateFile("data.txt",GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE, 
                        (LPSECURITY_ATTRIBUTES) NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL); 
                    //
                    //Если файл удалось открыть...
                    //
                    if (hFile)
                    {
                        //
                        //Определение размера файла
                        //
                        dwFileSize = GetFileSize(hFile, NULL);
                        if (dwFileSize == INVALID_FILE_SIZE)
                        {
                            MessageBox(NULL, "Cant get file size", "Error", MB_OK | MB_ICONSTOP);
                            return FALSE;
                        }
                        
                        //
                        //Выделение памяти для буфера
                        //
                        lpvBuff = VirtualAlloc(NULL, (SIZE_T)dwFileSize, MEM_COMMIT, PAGE_READWRITE);
                        if (lpvBuff == NULL)
                        {
                            MessageBox(NULL, "Cant allocate enough memory for file opening", "Error", MB_OK | MB_ICONSTOP);
                            return FALSE;
                        }
                        
                        cBuff = (LPTSTR)lpvBuff;
                                                                        
                        //
                        //Чтение из файла
                        //
                        SetFilePointer(hFile, 0, 0, FILE_BEGIN);
                        ReadFile(hFile, cBuff,  dwFileSize, &dwBytesRead, NULL); 
                        *(cBuff + dwBytesRead) = 0;
                        SendMessage(hwnd, (UINT)EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)cBuff);
                        
                        //
                        //Освобождение памяти
                        //
                        VirtualFree(lpvBuff, dwFileSize, MEM_RELEASE); 
                        
                        //
                        //Установка каретки в начало текста и флага модификации
                        //
                        SendMessage(hwnd, (UINT)EM_SETSEL, (WPARAM)0, (LPARAM)0);
                        SendMessage(hwnd, EM_SETMODIFY, FALSE, 0);  
                        
                        //
                        //Закрытие файла
                        //
                        CloseHandle(hFile);
                    }
                    else
                    {
                        //
                        //Вывод сообщения, если открытие файла невозможно
                        //
                        
                        MessageBox(NULL, "Can't open file", "ERROR", MB_OK); 
                        return FALSE;
                    }


Что сюда надо добавить чтобы содержимое отображалось в RichEdit

В окне находится Edit две кнопки и RichEdit
последний задается как 
Код

wdRichEdit = CreateWindow("RICHEDIT", "", ES_LEFT|ES_NOHIDESEL|ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL|WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_BORDER,
        20,50,100,200, hwnd, (HMENU)10001, hInstance, NULL);



Это сообщение отредактировал(а) Akeem - 17.9.2006, 21:19


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
rsm
Дата 17.9.2006, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Akeem, вместо простой вставки текста лучше используй потоки. Кусок рабочего кода из моей программы:
Код

DWORD __stdcall ReadStreamProc(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG FAR *pcb)
{
    return ReadFile((HANDLE) dwCookie, pbBuff, cb, pcb, 0) ^ 1;
}

void ReadFileToRichWnd(PCTSTR lpFileName, HWND hRichWnd)
{
    HANDLE hFile;
    EDITSTREAM esNotes;
    
    hFile = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        esNotes.dwCookie = (DWORD) hFile;
        esNotes.pfnCallback = &ReadStreamProc;
        SendMessage(hRichWnd, EM_STREAMIN, SF_TEXT, (LPARAM) &esNotes);
        SendMessage(hRichWnd, EM_SETMODIFY, FALSE, 0);
        CloseHandle(hFile);
    }
}

PM MAIL   Вверх
Akeem
Дата 18.9.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



rsm, 
Так смысл в том чтобы вставка текста производилась по нажатию на кнопку. которая тоже находится в окне. 


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

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


Опытный
**


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

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



Akeem, и чем это меняет дело - допиши нужный код и все. Я тебе просто привел пример, как загрузить текст из файла в RichEdit без всяких там выделений памяти и пр.

Это сообщение отредактировал(а) rsm - 18.9.2006, 17:01
PM MAIL   Вверх
Akeem
Дата 18.9.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



rsm, 
тогда обьясни работу кода,  а то мой компилер сильно ругается.

Я допишу эти две функции. 

после компиляции выдает ошибку: 
Код

[C++ Warning] rununit.cpp(65): W8004 'hCurs2' is assigned a value that is never used
  [C++ Warning] rununit.cpp(65): W8004 'wdSaveButton' is assigned a value that is never used
  [C++ Warning] rununit.cpp(65): W8004 'wdLoadButton' is assigned a value that is never used
  [C++ Warning] rununit.cpp(65): W8004 'wdEditBox' is assigned a value that is never used
  [C++ Warning] rununit.cpp(65): W8004 'wdRichEdit' is assigned a value that is never used
  [C++ Error] rununit.cpp(69): E2034 Cannot convert 'unsigned long' to 'unsigned long *'
  [C++ Error] rununit.cpp(69): E2342 Type mismatch in parameter 'lpNumberOfBytesRead' (wanted 'unsigned long *', got 'unsigned long')
  [C++ Error] rununit.cpp(84): E2034 Cannot convert 'unsigned long (__stdcall *)(unsigned long,unsigned char *,unsigned long,long *)' to 'unsigned long (__stdcall *)(unsigned long,unsigned char *,long,long *)'
  [C++ Error] rununit.cpp(226): E2034 Cannot convert 'int' to 'void *'
  [C++ Error] rununit.cpp(226): E2342 Type mismatch in parameter 'hRichWnd' (wanted 'void *', got 'int')
  [C++ Warning] rununit.cpp(228): W8004 'cBuff' is assigned a value that is never used



Это сообщение отредактировал(а) Akeem - 18.9.2006, 17:20


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

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


Опытный
**


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

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



rsm, что означает строка
Код

esNotes.pfnCallback = &ReadStreamProc;



ошибки при компиляции

Код

 [C++ Error] rununit.cpp(85): E2034 Cannot convert 'unsigned long (__stdcall *)(unsigned long,unsigned char *,unsigned long,unsigned long *)' to 'unsigned long (__stdcall *)(unsigned long,unsigned char *,long,long *)'
  [C++ Error] rununit.cpp(226): E2034 Cannot convert 'long' to 'unsigned long *'
  [C++ Error] rununit.cpp(226): E2342 Type mismatch in parameter 'pcb' (wanted 'unsigned long *', got 'long')



Это сообщение отредактировал(а) Akeem - 18.9.2006, 17:32


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
rsm
Дата 18.9.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Для С++ чтоб не было проблем придется такое вот чудовищное извращение забацать:
Код

DWORD __stdcall ReadStreamProc(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG FAR *pcb)
{
    return ReadFile(reinterpret_cast<HANDLE>(dwCookie), pbBuff, cb, reinterpret_cast<PDWORD>(pcb), 0) ^ 1;
}

void ReadFileToRichWnd(PCTSTR lpFileName, HWND hRichWnd)
{
    HANDLE hFile;
    EDITSTREAM esNotes;
    
    hFile = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        esNotes.dwCookie = reinterpret_cast<DWORD>(hFile);
        esNotes.pfnCallback = reinterpret_cast<EDITSTREAMCALLBACK>(&ReadStreamProc);
        SendMessage(hRichWnd, EM_STREAMIN, SF_TEXT, reinterpret_cast<LPARAM>(&esNotes));
        SendMessage(hRichWnd, EM_SETMODIFY, FALSE, 0);
        CloseHandle(hFile);
    }
}


Цитата(Akeem @  18.9.2006,  19:30 Найти цитируемый пост)
что означает строка

Члену pfnCallback структуры EDITSTREAM передается адрес функции ReadStreamProc.
PM MAIL   Вверх
Akeem
Дата 18.9.2006, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



rsm, 
Всё таже проблема осталась! Всё класно компилится, но всё равно не выводит в окно содерживое файла. 

П.С. Мда. это конечно изврат!


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
rsm
Дата 19.9.2006, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Akeem @  19.9.2006,  00:08 Найти цитируемый пост)
Всё класно компилится

Тогда почему у меня все преспокойно работает? (см. аттач)

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  rich.zip 2,86 Kb
PM MAIL   Вверх
Akeem
Дата 19.9.2006, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



rsm, 
Скинь мне плиз на почту, а то почему -то я не могу ничего с форума скачать!


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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