示例#1
0
static void motion( GtkWidget *widget, GdkEventMotion *event, gpointer data ){
	GLWindow *wnd = (GLWindow*)data;
	guint32 flags = 0;

	if ( ( event->state & GDK_BUTTON1_MASK ) != 0 ) {
		flags |= MK_LBUTTON;
	}

	if ( ( event->state & GDK_BUTTON2_MASK ) != 0 ) {
		flags |= MK_MBUTTON;
	}

	if ( ( event->state & GDK_BUTTON3_MASK ) != 0 ) {
		flags |= MK_RBUTTON;
	}

	if ( ( event->state & GDK_CONTROL_MASK ) != 0 ) {
		flags |= MK_CONTROL;
	}

	if ( ( event->state & GDK_SHIFT_MASK ) != 0 ) {
		flags |= MK_SHIFT;
	}

	wnd->OnMouseMove( flags, (int)event->x, (int)event->y );
}
示例#2
0
文件: glwindow.cpp 项目: bagobor/AV3D
LRESULT CALLBACK GLWindow::WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    GLWindow* instance = (GLWindow*) GetWindowLongPtr(hwnd, GWL_USERDATA);

    switch (msg)
    {
        case WM_CREATE:
        {
			CREATESTRUCT* create = (CREATESTRUCT*) lParam;
			instance = (GLWindow*) create->lpCreateParams;
			SetWindowLongPtr(hwnd, GWL_USERDATA, (LONG_PTR) instance);
			return 0;
		}
        case WM_SIZE:
		    instance->OnResize(LOWORD(lParam), HIWORD(lParam));
			return 0;
    
        case WM_CLOSE:
            DestroyWindow(hwnd);
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;

        case WM_KEYDOWN:
            instance->OnKeyDown(wParam);
            return 0;

        case WM_RBUTTONDOWN:
        case WM_LBUTTONDOWN:
            SetCapture(hwnd);
            instance->OnMouseDown(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
            return 0;

        case WM_RBUTTONUP:
        case WM_LBUTTONUP:
            ReleaseCapture();
            instance->OnMouseUp(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
            return 0;

        case WM_MOUSEMOVE:
            instance->OnMouseMove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
            return 0;

        case WM_ERASEBKGND:
            return 1;

        case WM_PAINT:
            if (GetUpdateRect(hwnd, NULL, FALSE)) 
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hwnd, &ps);
                instance->OnRender();
                SwapBuffers(hdc);
                EndPaint(hwnd, &ps);
            }
            return 0;

        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
}