Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

SendMessage() nie wysyła komunikatu

Ostatnio zmodyfikowano 2015-08-02 21:49
Autor Wiadomość
carlosmay
Temat założony przez niniejszego użytkownika
SendMessage() nie wysyła komunikatu
» 2015-08-01 23:05:52
C/C++
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.

C/C++
WNDCLASSEX wc;
wc.cbSize = sizeof( WNDCLASSEX );
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; // CS_DBLCLKS info od systemu o dwukliku
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)
P-135591
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.
P-135599
Monika90
» 2015-08-02 11:25:24
Wysyła, tylko zmienna Przyc ma wartość false.
P-135602
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.
P-135603
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.
C/C++
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: // stawia kropke gdy nacisne lbutton
        {
            HDC hdc = GetDC( hWnd );
            SetPixel( hdc, LOWORD( lParam ), HIWORD( lParam ), RGB( 255, 0, 0 ) );
            ReleaseDC( hWnd, hdc );
        }
        break;
       
    case WM_MOUSEMOVE: // rysuje linie gdy trzymam lbutton
        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
P-135627
« 1 »
  Strona 1 z 1