Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

react



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WiseAlex

Цитата:
http://www.sources.ru/cpp/cpp_system.shtml#7

 Сенькс за ссылку !!!

Всего записей: 773 | Зарегистр. 08-02-2002 | Отправлено: 14:57 21-10-2004
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
может есть разница в скорости загрузки в окно ричедита в SDI-приложении и MDI-проге?
у меня MDI. Сомневаюсь, что это так, но вдруг все обстоит таким образом?

Всего записей: 3322 | Зарегистр. 13-05-2002 | Отправлено: 15:20 21-10-2004
segeich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vito333
Дык ты небось сначала файл грузишь, а потом его в richedit копируешь?
 
Набросал простой тест через STREAMIN, подсунул ему файл на 100 мегов - 12 секунд.
Открыл файл 2-м бредом - те же 12 секунд.
 
На 23-х меговом файле - 2-3 сек у обоих.
 

Код:
 
DWORD LoadCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG* pcb)
{
   FILE* file = (FILE*)dwCookie;
   *pcb = fread(pbBuff, 1, cb, file);
   return 0;
}
 
void CTestDlg::OnLoad()
{
   FILE* file = fopen("c:\\big.txt", "rb");
 
   EDITSTREAM stream;
   stream.dwCookie = (DWORD_PTR)file;
   stream.pfnCallback = LoadCallback;
 
   m_richedit.StreamIn(SF_TEXT, stream);
 
   fclose(file);
}
 

Всего записей: 112 | Зарегистр. 03-01-2003 | Отправлено: 15:53 21-10-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vito333
Я согласен с segeich, так как большой разницы между его кодом и тем, что в бреде не заметил, та же самая работа с потоком. Разницы между загрузкой в МДИ и СДИ быть не должно. Дай свой кусок, как ты открываешь файл. Мож там трабла.


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:23 22-10-2004
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
да в том то и дело, я для проверки спрашивал, сам я вижу, что одно и то же и в бреде и у меня. Существенный момент есть такой - бред большой файл начинает отображать еще и не загрузив полностью, у меня же только после полной практически загрузки - отсюда визуальная разница.
http://vito.rbcmail.ru/Mark2.exe
попробуй драг"н"дропом кинуть в эту прогу файл габаритный - в статбаре будут сообщения: "file was read" - файл считан в ReadFile-ом в буфер в памяти, "converted" - весь буфер конвертирован в юникод, "ready" - файл полностью загружен из буфера в ричедит. Так вот скорость загрузки в рич даже из памяти очень невысока. Правда ричедит юникодовый, но я сравнивал с обычным - разницы нет. Я проверил - загрузка в ричедит идет кусками по 4096 байт, итого на файле 26 мб - несколько десятков тыс. операций по 4096 б. Не могу понять, из памяти он медленнее грузится, что ли, чем с диска. Я перешел на юникодовый контрол, а посему мне напрямую загрузка не подходит - юникод так не реализуешь, все равно конвертить надо, а значит - буфер нужен.
 
Попробую сейчас напрямую с диска в рич грузить, сравню, хотя я по-моему уже пробовал.
 
Добавлено
BOOL File_Load(LPCTSTR fullfilename)  
{
EDITSTREAM es = {0};
HANDLE hfile;
HWND hRTF,hwnd;
DWORD bufSize, bytesReaded;
PCHAR pBuf;
LPDOC_INFO pDI;
TCHAR fn[MAX_PATH]={0};  
 
lstrcpy(fn,fullfilename);
hfile = CreateFile(fullfilename,GENERIC_READ,0,0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
if (hfile == INVALID_HANDLE_VALUE) return FALSE;
// готовим структуру
ZeroMemory(&BufInfo,sizeof(BufInfo));
// получаем размер файла
BufInfo.BufSize = bufSize = GetFileSize(hfile,0);
 
// проверяем, годится ли текущее окно для загрузки документа?
if (hwnd = hActiveMdiWnd())
{
// получаем адрес структуры данных окна
pDI = ptrWNDSTRUCT(hwnd);
// есть активное мди-окно - проверяем его РТФ
GETTEXTLENGTHEX tl;
hRTF = hActiveRTF(hwnd);
tl.flags = GTL_NUMCHARS;
tl.codepage = CP_ACP;
 // если длина текста в РТФ != 0, то создаем новое окно
if (SNDMSG(hRTF, EM_GETTEXTLENGTHEX, (WPARAM)&tl, 0))
{
// создаем новое окно для открываемого файла
hwnd = Child_Window_New((LPCTSTR)fn);
}else{  
// поправляем заголовок окна
SetWindowText(hwnd,fn);
// set new tab title
Tab_ChangeTitle( mainTabBar.hTabBar,1111,fn);
}
}
else  // нет активного мди-окна  
{
// создаем новое окно для открываемого файла
hwnd = Child_Window_New((LPCTSTR)fn);
// получаем адрес структуры данных окна
pDI = ptrWNDSTRUCT(hwnd);
}
 
// вычисляем хэндл ричедита
hRTF = hActiveRTF(hwnd);// di->hwnd_RTF;
 
// готовим структуру для EM_STREAMIN
es.dwCookie = (DWORD_PTR)hfile;
es.pfnCallback = &LoadFileCallBack2;
 
// загружаем файл
long rtfmask = SendMessage (hRTF,EM_SETEVENTMASK,0,0);
SNDMSG(hRTF, EM_STREAMIN,(WPARAM)(UINT)SetStreaminFlags(fn),(LPARAM)(EDITSTREAM FAR *) &es);
SendMessage (hRTF,EM_SETEVENTMASK,0,rtfmask);
 
// закрываем хэндл считанного файла
CloseHandle(hfile);
 
 // ставим флаг, что файл не изменялся
SNDMSG(hRTF, EM_SETMODIFY,(WPARAM)FALSE,(LPARAM)0);
 
ToolBar_Buttons_SetState(hRTF);
 // сохраняем в список MRD
MRD_save((LPTSTR)fn);  
 
  return TRUE;
}
 
static DWORD CALLBACK  
LoadFileCallBack2(DWORD dwCookie,  // application-defined value
LPBYTE lpBuffer, // pointer to a buffer
LONG lSize,    // number of bytes to read or write
LONG *plRead)  // pointer to number of bytes transferred
{
if(!lSize) return 1;
if(!ReadFile((HANDLE) dwCookie,lpBuffer, lSize, (LPDWORD) plRead, NULL))
return -1;
return 0;
}
вот собсно загрузка в обычный ричедит контрол.
на 26 мб файл тхт ~5-6 сек.

Всего записей: 3322 | Зарегистр. 13-05-2002 | Отправлено: 17:51 26-10-2004
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а бред2 у меня файл 26 мб начинает отображать через 1 сек.

Всего записей: 3322 | Зарегистр. 13-05-2002 | Отправлено: 10:55 29-10-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vito333
только что проверил у себя твою прогу и бред3 скорость один в один ну может на секунду разница. Правда у меня Атлон 2500+ и памяти 512 ДДР 400 мгц. А так даже в принципе не заметно различия. Бред2 проверить не смог, он виснет при открытии файла на котором я тестил

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 01-11-2004
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
я пробую на своем пень3-500 и 512 рамы.
бред3 заметно быстрее, думаю за счет того, что у него свой контрол, а не ричедит.
в общем, вопрос снимается - никаким способом, видимо, загрузку в ричедит не ускоришь.
спасибо за помощь.

Всего записей: 3322 | Зарегистр. 13-05-2002 | Отправлено: 15:48 01-11-2004
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
я тут, объясняй, лучше попроще и попонятней по шагам, а то я пока к вопросу не подступался. То есть я создаю не полный шаблон открытия файла, а только кусок с нужными контролами? Флагами в системном вызове функции указываю использовать шаблон. Как он позиционируется в системном?

Всего записей: 3322 | Зарегистр. 13-05-2002 | Отправлено: 06:38 15-11-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
То есть я создаю не полный шаблон открытия файла, а только кусок с нужными контролами?

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

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 09:17 15-11-2004
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
когда я свой шаблон делаю я предполагаю размер системного шаблона такой как вижу при его открытии?и исходя из его размеров я размещаю свои контролы, чтобы они ставились вниз или еще куда? у меня сист. диалог например сторонней программой растягивается раза в 2 - это удобно. И еще, не пробовал выравнивать, допустим, новый комбобокс по системным, чтоб все ровно было? Проблем нету?
принцип понятен, я вот этого и не знал как раз, дальше метод самотыка ... и твоя помощь
 
Добавлено
а проект с кодом - давай, хоть и дельфи, но апи и ресурсы пойму

Всего записей: 3322 | Зарегистр. 13-05-2002 | Отправлено: 10:09 15-11-2004
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 И еще, не пробовал выравнивать, допустим, новый комбобокс по системным, чтоб все ровно было? Проблем нету?

проблем нет, просто берешь и располагаешь их там, чтобы они примерно были под системными, в крайнем случае, потом в хуковой процедуре сдвинешь их немного. Контролы могут добавляться вниз и справа, если ширина шаблона больше ширины текста с координатами 0,0 это я еще в письме упоминал, просто после первого сообщения я продолжил опыты и выяснил несколько фишек. Так вот, если поместить контрол за пределами данного текста, который пустой (если его убрать, то даже если ширина шаблона больше диалога открыть, то он не меняет свои размеры по крайней мере у меня) и выше его нижней грани (в смысле текста), то он ббудет располагаться справа диалога, там он растягивается и сверху, а если верхняя граница контрлола ниже нижней текста, то он будет находиться внизу.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:00 16-11-2004
react



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ !!!
 
 Промучался я с написанием программы под com-порт да так ничего и не получилось
 Помогите плиз з нормальным рабочим сырцом (я уже кучу перепробовал но ниодин не заработал). Мне нужно  
  чтоб com-порт инициализировался и в асинхронном режиме ждал данных с порта и получив какие-то данные  
  выводил в консоль результат...
 
 Заранее огромное спасибо !!!

Всего записей: 773 | Зарегистр. 08-02-2002 | Отправлено: 14:27 30-11-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
react
с асинхронностью есть свои заморочки - мне в свое время помог sawamail
пример кинул на мыло
Если что- спрашивай, заодно попроси  sawamail его пример (там было понятнее но он у меня к сожалению не сохранился)
 
 

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 14:58 30-11-2004 | Исправлено: WiseAlex, 15:04 30-11-2004
react



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WiseAlex

Цитата:
пример кинул на мыло

 на какое мыло ??? кинь плиз на omir@ua.fm

Всего записей: 773 | Зарегистр. 08-02-2002 | Отправлено: 15:17 30-11-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
react

Цитата:
на какое мыло ???  

на профильное

Цитата:
кинь плиз на omir@ua.fm

лови

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 16:11 30-11-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
react

Цитата:
кинь плиз на omir@ua.fm  

не дошло
кинул еще раз

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 11:51 03-12-2004
react



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WiseAlex
 
Цитата:
не дошло  
кинул еще раз

 
 Пасибо, но оно опять не дошло... может слишком увесистое ? В любом случае sawamail мне уже выслал свой  
  пример - буду с ним разбираться... Все равно спасибо !!!

Всего записей: 773 | Зарегистр. 08-02-2002 | Отправлено: 12:04 03-12-2004
Sensej



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня вопрос, может быть туповатый на фоне всех остальных, но я, мягко говоря, не великий спец по C и только начал изучать Win API и не понимаю фундаментальной вещи:
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
 
или  
 
int WINAPI WinMain (блаблабла);
 
Какую роль играют CALLBACK и WINAPI в этих декларациях? Я привык к виду:
тип ИмяФункции (параметры);
 
а здесь:
тип ФИГЗНАЕТЧТО ИмяФункции (параметры);
 
Тэнькс.
 
 
Добавлено:
Ложная тревога, Дошло!
 

Цитата:
 
The WinMain function is declared as returning an int. The WINAPI identifier is defined in WINDEF.H with the statement:  
 
 
#define WINAPI __stdcall
 
 
This statement specifies a calling convention that involves how machine code is generated to place function call arguments on the stack. Most Windows function calls are declared as WINAPI.  
 
 

Всего записей: 44 | Зарегистр. 09-05-2004 | Отправлено: 16:15 05-02-2005
VictorMi

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интересно, почему в функцию KeyboardProc (которая работает с хуками) не передается хандл окна и вид сообщения? Почему сделали именно  так? Ведь на первый взгляд логичнее передавать туда все сообщение.

Всего записей: 819 | Зарегистр. 30-06-2004 | Отправлено: 19:07 01-03-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru