carlosmay Temat założony przez niniejszego użytkownika |
SendMessage() nie wysyła komunikatu » 2015-08-01 23:05:52 LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { bool Przyc = false; switch( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); break; case WM_CLOSE: DestroyWindow( hWnd ); break; case WM_LBUTTONDOWN: { Przyc = true; SendMessage( hWnd, WM_MOUSEMOVE, wParam, lParam ); } break; case WM_LBUTTONUP: Przyc = false; break; case WM_MOUSEMOVE: if( Przyc ) { HDC hdc = GetDC( hWnd ); SetPixel( hdc, LOWORD( lParam ), HIWORD( lParam ), RGB( 255, 0, 0 ) ); ReleaseDC( hWnd, hdc ); } break; default: return DefWindowProc( hWnd, msg, wParam, lParam ); break; } return 0; }
SendMessage nie wysyła komunikatu do WM_MOUSEMOVE. WNDCLASSEX wc; wc.cbSize = sizeof( WNDCLASSEX ); wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hIcon = LoadIcon( hInst, MAKEINTRESOURCE( IDI_APPLICATION ) ); wc.hIconSm = LoadIcon( wc.hInstance, MAKEINTRESOURCE( IDI_APPLICATION ) ); wc.lpszClassName = szClassName; wc.lpszMenuName = NULL; wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); if( !RegisterClassEx( & wc ) ) return 1;
Jak wrzucę MessageBox do WM_LBUTTONDOWN normalnie daje komunikat. Jak zaneguje Przyc w WM_MOUSEMOVE to rysuje cały czas, czyli dobrze. Jak użyję SendMessageCallback stawia kropki po naciśnięciu przycisku. A tak nic się nie rysuje. (visual studio express 2013 up. 4) |
|
DejaVu |
» 2015-08-02 10:31:26 no i dobrze ze tego nie robi bo bys ingerowal w zachowanie kursora myszy, ktory nie nalezy do aplikacji. |
|
Monika90 |
» 2015-08-02 11:25:24 Wysyła, tylko zmienna Przyc ma wartość false. |
|
Elaine |
» 2015-08-02 11:31:13 no i dobrze ze tego nie robi bo bys ingerowal w zachowanie kursora myszy, ktory nie nalezy do aplikacji |
Co? Dlaczego SendMessage miałoby robić cokolwiek z kursorem myszy? Ten komunikat tak nie działa. |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2015-08-02 21:49:35 Dzięki za pomoc: to działający kod, może ktoś skorzysta. LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { bool Przyc = false; switch( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); break; case WM_CLOSE: DestroyWindow( hWnd ); break; case WM_LBUTTONDOWN: { HDC hdc = GetDC( hWnd ); SetPixel( hdc, LOWORD( lParam ), HIWORD( lParam ), RGB( 255, 0, 0 ) ); ReleaseDC( hWnd, hdc ); } break; case WM_MOUSEMOVE: if( wParam == MK_LBUTTON ) { HDC hdc = GetDC( hWnd ); SetPixel( hdc, LOWORD( lParam ), HIWORD( lParam ), RGB( 255, 0, 0 ) ); ReleaseDC( hWnd, hdc ); } break; default: return DefWindowProc( hWnd, msg, wParam, lParam ); break; } return 0; }
Szukałem w msdn, ale jakoś udało mi się pimonąć tem topic. Działa jak laleczka. W kursie jest podany ten niedziałający sposób. Patrz "Poruszanie myszą". http://cpp0x.pl/kursy/Kurs-WinAPI-C++/Podstawy/Obsluga-myszy-i-klawiatury/179 |
|
« 1 » |