сделал в MFC-шной проге FindText диалог через апи, отлавливаю когда нажимается кнопка Find, вывожу на экран то что искалось:
if(message==WM_FINDMESSAGE)
{
LPFINDREPLACE lpfr= (LPFINDREPLACE)lParam;
if (lpfr->Flags & FR_FINDNEXT)
{
MessageBox(lpfr->lpstrFindWhat);
}
}
но ничего не выводится - в чем дело? по адресу lpfr->lpstrFindWhat пусто, хотя половина элементов по адресу lprf содержат верные значения. где копать?
Буй!
[Win32] Find Common Dialog08.06.01 03:14 Автор: kabanchik Статус: Незарегистрированный пользователь
> Привет, All! > > сделал в MFC-шной проге FindText диалог через апи, > отлавливаю когда нажимается кнопка Find, вывожу на экран то > что искалось: > if(message==WM_FINDMESSAGE) > { > > LPFINDREPLACE lpfr= (LPFINDREPLACE)lParam; > > if (lpfr->Flags & FR_FINDNEXT) > { > MessageBox(lpfr->lpstrFindWhat); > } > } > но ничего не выводится - в чем дело? по адресу > lpfr->lpstrFindWhat пусто, хотя половина элементов по > адресу lprf содержат верные значения. где копать? > > Буй!
тут сразу фиг поймешь. я не понял - lpfr->lpstrFindWhat вообще пуст, или MessageBox не выводит на экран?
и еще, если ты пишешь через АПИ, то MessageBox - у тебя какой АПИшный или МФСишный?
еще через что ты передаешь FINDREPLACE, через SendMesage или PostMessage. если PostMessage, то проследи, чтобы твой объект существовал в памяти в момент обработки мессаг. к примеру такое может вызвать ошибку :
когда мессага дойдет, от структуры может и ничего не остаться.
тут куча причин могут быть, пока в голову пришли только эти.
и еще не понял как это - "хотя половина элементов по адресу lprf содержат верные значения" - а другая половина где пропадает? и что содержит поле Flags до отправки сообщения и в момент получения? по моему, все таки, если "половина" теряеться по дороге, то твоя структура FINDREPLACE высвобождаеться из памяти и ты получаешь какой то непонятный мусор.
[Win32] Find Common Dialog08.06.01 03:26 Автор: LBH Статус: Незарегистрированный пользователь
> тут сразу фиг поймешь. я не понял - lpfr->lpstrFindWhat > вообще пуст, или MessageBox не выводит на экран? пуст, смотрел через watch
> и еще, если ты пишешь через АПИ, то MessageBox - у тебя > какой АПИшный или МФСишный? mfc'шный, имхо практически одинаковые
> еще через что ты передаешь FINDREPLACE, через SendMesage > или PostMessage. если PostMessage, то проследи, чтобы твой ловлю сообщение в WindowProc MFC'шном
> объект существовал в памяти в момент обработки мессаг. к > примеру такое может вызвать ошибку : нет, там в lParam находится указатель на область памяти содержащую FINDREPLACE структуру,сл. выделять ничего не надо, если есть мсдн или платформсдк - глянь там, мож что увидишь чего я не увидел
> > FINDREPLACE find; > .................. > ::PostMessage(hWnd, WM_FINDMESSAGE, 0, (LPARAM)&find); > > когда мессага дойдет, от структуры может и ничего не > остаться. > > тут куча причин могут быть, пока в голову пришли только > эти. > и еще не понял как это - "хотя половина элементов по адресу > lprf содержат верные значения" - а другая половина где размер структуры верный, размер поля lpstrFindWhat верный (там отдельная переменная за это отвечает), адрес в памяти тоже верный, а текста нету
> пропадает? и что содержит поле Flags до отправки сообщения > и в момент получения? по моему, все таки, если "половина" > теряеться по дороге, то твоя структура FINDREPLACE > высвобождаеться из памяти и ты получаешь какой то > непонятный мусор.
посмотри сообщение +-а, он правильный вопрос задал.
вот где ошибка
lpstrFindWhat
Pointer to a buffer that a FINDMSGSTRING message uses to pass the null terminated search string that the user typed in the Find What edit control. You must dynamically allocate the buffer or use a global or static array so it does not go out of scope before the dialog box closes. The buffer should be at least 80 characters long. If the buffer contains a string when you initialize the dialog box, the string is displayed in the Find What edit control.
т.е. надо хотя бы :
static TCHAR szFind[80];
szFind[0] = '\0';
> FindReplace.lpstrFindWhat = szFind; > FindReplace.wFindWhatLen=sizeof(szFind);
удачи.
[Win32] Find Common Dialog08.06.01 04:02 Автор: + <Mikhail> Статус: Elderman