Не может заставить Windows Common находить работающий диалог
Я действительно не понимаю эти примеры из Интернета. Они все фрагментарные. Нет простого простого примера, как сделать классический диалог поиска текста.
Я положил то, что я знаю, но не показывает никакого окна и возвращает: 2147500037
0x80004005
#include <windows.h>
#include <iostream>
#include <iomanip>
int main() {
using namespace std;
UINT uFindReplaceMsg; // message identifier for FINDMSGSTRING
uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING);
wstring search_str = L"text to search";
HWND findDialog = NULL;
wchar_t szFindWhat[MAX_PATH];
FINDREPLACEW fr;
ZeroMemory( & fr, sizeof( FINDREPLACEW ) );
fr.lStructSize = sizeof( FINDREPLACEW );
fr.hwndOwner = NULL;
fr.lpstrFindWhat = szFindWhat;
fr.wFindWhatLen = MAX_PATH;
findDialog = FindTextW(&fr);
cout << GetLastError() << endl;
cout << hex << GetLastError() << endl;
}
Не могли бы вы предоставить мне код, который работает, чтобы я мог строить из этого.
1 ответ
Вы не проверяете результат возврата из FindTextW
, То есть у вас есть:
findDialog = FindTextW(&fr);
cout << GetLastError() << endl;
Если функция завершается успешно, результатом является дескриптор. Если функция завершается ошибкой, возвращаемое значение равно NULL.
Согласно документации:
Если функция завершается ошибкой, возвращаемое значение равно NULL. Чтобы получить расширенную информацию об ошибке, вызовите функцию CommDlgExtendedError. CommDlgExtendedError может возвращать один из следующих кодов ошибок:
Другими словами, GetLastError
не скажет вам ничего значимого. Вызов CommDlgExtendedError
после того, как вы проверите ручку, чтобы увидеть, если это NULL.