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. |
|
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? |
|
matiasz Temat założony przez niniejszego użytkownika |
» 2013-08-06 18:53:40 #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. |
|
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. |
|
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 ? |
|
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. |
|
1 « 2 » |