0

Web からのこれらの例を本当に理解していません。それらはすべて断片的です。古典的なテキスト検索ダイアログを作成する方法の簡単で簡潔な例はどこにもありません。

私が知っていることを this に入れましたが、ウィンドウが表示されず、次のように返されます: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;
}

そこから構築できるように機能するコードを提供していただけますか。

4

1 に答える 1

1

からの戻り結果をチェックしていませんFindTextW。つまり、次のものがあります。

findDialog = FindTextW(&fr);
cout << GetLastError() << endl;

関数が成功すると、結果はハンドルになります。関数が失敗した場合、戻り値は NULL です。

ドキュメントによると:

関数が失敗した場合、戻り値は NULL です。拡張エラー情報を取得するには、CommDlgExtendedError 関数を呼び出します。CommDlgExtendedError は、次のエラー コードのいずれかを返す場合があります。

つまり、GetLastError意味のあることは何も教えてくれません。ハンドルをチェックして NULL かどうかを確認してからCommDlgExtendedError 呼び出します。

于 2013-03-14T18:15:11.197 に答える