Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Find Common Dialog 08.06.01 03:26 Число просмотров: 852
Автор: 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 > высвобождаеться из памяти и ты получаешь какой то > непонятный мусор.
void CLBHMoneyAccountDlg::OnFind()
{
WM_FINDMESSAGE=RegisterWindowMessage(FINDMSGSTRING);
ZeroMemory(&FindReplace,sizeof(FindReplace));
FindReplace.lStructSize=sizeof(FindReplace);
FindReplace.lpstrFindWhat = "";
FindReplace.wFindWhatLen=80;
FindReplace.Flags=FR_NOMATCHCASE|FR_NOWHOLEWORD;
FindReplace.hwndOwner=this->GetSafeHwnd();
FRWin.m_hWnd = FindText(&FindReplace);
}
LRESULT CLBHMoneyAccountDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message==WM_FINDMESSAGE)
{
LPFINDREPLACE lpfr= (LPFINDREPLACE)lParam;
if (lpfr->Flags & FR_FINDNEXT)
{
MessageBox(FindReplace.lpstrFindWhat);
}
}
else return CDialog::WindowProc(message, wParam, lParam);
return NULL;
}
|
|
|