darek40bc Temat założony przez niniejszego użytkownika |
WinApi - problem z funckją FindText() opisaną w kursie na tej stronie » 2013-05-04 19:18:37 Nie działa mi funkcja FindText() oraz ReplaceText(). Okno dialogowe wyszukiwania jest wyświetlane prawidłowo. Niestety Visual C++ w wyniku jakiegoś zdarzenia na tym oknie wyświetla "First-chance exception at 0x0000000f in 17 Dialog wyszukiwania.exe: 0xC0000005: Access violation.". Po chwili program przestaje działać i zostaje wyświetlony komunikat "Unhandled exception at 0x00000111 in 17 Dialog wyszukiwania.exe: 0xC0000005: Access violation.". Poniżej wklejam kod źródłowy tego programu. #include <windows.h>
LPSTR g_strClassWindow = "Darek"; HWND g_hWnd; HWND g_hFindButton;
char buffer[ 80 ];
UINT WM_FINDREPLACE;
LRESULT CALLBACK WindowEventProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow ) { WNDCLASSEX ClassWindow; ZeroMemory( & ClassWindow, sizeof( WNDCLASSEX ) ); ClassWindow.cbSize = sizeof( WNDCLASSEX ); ClassWindow.hInstance = hInstance; ClassWindow.lpfnWndProc = WindowEventProc; ClassWindow.lpszClassName = g_strClassWindow; ClassWindow.hIcon = LoadIcon( NULL, IDI_APPLICATION ); ClassWindow.hCursor = LoadCursor( NULL, IDC_ARROW ); ClassWindow.hbrBackground =( HBRUSH ) GetStockObject( LTGRAY_BRUSH ); if( !RegisterClassEx( & ClassWindow ) ) { MessageBox( NULL, "Nieudana rejestracja klasy okna.", "Blad", MB_ICONERROR ); return 1; } WM_FINDREPLACE = RegisterWindowMessage( FINDMSGSTRING ); g_hWnd = CreateWindowEx( 0, g_strClassWindow, "Dialog wyszukiwania", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL ); if( !g_hWnd ) { MessageBox( NULL, "Nieudane tworzenie okna.", "Blad", MB_ICONINFORMATION ); return 1; } g_hFindButton = CreateWindowEx( 0, "BUTTON", "Znajdz", WS_VISIBLE | WS_CHILD, 20, 20, 100, 70, g_hWnd, NULL, hInstance, NULL ); ShowWindow( g_hWnd, nCmdShow ); MSG Message; while( GetMessage( & Message, NULL, 0, 0 ) ) { TranslateMessage( & Message ); DispatchMessage( & Message ); } return static_cast < int >( Message.wParam ); }
LRESULT CALLBACK WindowEventProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch( uMsg ) { case WM_COMMAND: if(( HWND ) lParam == g_hFindButton ) { FINDREPLACE fr; ZeroMemory( & fr, sizeof( FINDREPLACE ) ); fr.lStructSize = sizeof( FINDREPLACE ); fr.hwndOwner = g_hWnd; fr.lpstrFindWhat = buffer; fr.wFindWhatLen = 80; lstrcpy( buffer, "tekst" ); FindText( & fr ); } return 0; case WM_CLOSE: DestroyWindow( hWnd ); return 0; case WM_DESTROY: PostQuitMessage( 0 ); return 0; } return DefWindowProc( hWnd, uMsg, wParam, lParam ); } |