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

[WinAPI] Pobranie pozycji kursora myszy

Ostatnio zmodyfikowano 2013-08-06 19:19
Autor Wiadomość
matiasz
Temat założony przez niniejszego użytkownika
» 2013-08-06 18:47:21
Mam to zrobić w funkcji czy jak bo po za obszarem WM_MOUSEMOVE kod nie daje w cale żadnego efektu.

Dlaczego mnie interesuje ?
Ponieważ chcę zrobić program który po wskazaniu danego koloru poda jego numer wartość rgb ,cmyk itp.
P-89634
pekfos
» 2013-08-06 18:49:03
Mam to zrobić w funkcji czy jak bo po za obszarem WM_MOUSEMOVE kod nie daje w cale żadnego efektu.
Poza WM_MOUSEMOVE, czyli gdzie?
P-89635
matiasz
Temat założony przez niniejszego użytkownika
» 2013-08-06 18:53:40
C/C++
#include <windows.h>
#include <windowsx.h>
#include <iostream>

using namespace std;

LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;
LRESULT CALLBACK proc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
   
    WNDCLASSEX wc;
   
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.style = CS_DBLCLKS;
    wc.lpfnWndProc = proc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wc.lpszMenuName = NULL;
    wc.lpszClassName = NazwaKlasy;
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
   
    HWND hwnd;
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Oto okienko", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL );
   
    ShowWindow( hwnd, nCmdShow );
    UpdateWindow( hwnd );
    while( GetMessage( & Komunikat, NULL, 0, 0 ) )
    {
        TranslateMessage( & Komunikat );
        DispatchMessage( & Komunikat );
    }
    return 0;
   
}
LRESULT CALLBACK proc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    POINT point;
    GetCursorPos( & point );
    HDC dc = GetDC( NULL );
    COLORREF color = GetPixel( dc, point.x, point.y );
    ReleaseDC( NULL, dc );
    cout << point.x << "|" << point.y << "|" << color << endl;
    switch( msg )
    {
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
       
    case WM_MOUSEMOVE:
        {
        }
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
    return 0;
}

Zrobiłem tak i efekt ten sam jakby kod był w WM_Mousemove ,a w środku WinMain nie działa w cale.
P-89636
pekfos
» 2013-08-06 18:57:49
Jak się nie rozumie własnego kodu, to pora powtórzyć podstawy.. Nie uzyskasz pożądanego efektu bezmyślnie wtykając ten kod w różne miejsca programu. Aby sprawdzanie działało niezależnie od obsługi zdarzeń, musiałbyś zmodyfikować pętlę komunikatów lub utworzyć drugi wątek.
P-89637
matiasz
Temat założony przez niniejszego użytkownika
» 2013-08-06 19:11:02
Jestem początkującym w WinApi więc dużo przede mną. Jak mam zmodyfikować pętle jakieś podpowiedzi ?
P-89638
pekfos
» 2013-08-06 19:19:04
Użyj nieblokującej funkcji do odbierania komunikatów, dodaj opóźnienie i w tej sprawdzaj pozycje kursora. Wszystko znajdziesz w googlach.
P-89639
1 « 2 »
Poprzednia strona Strona 2 z 2