LRESULT CALLBACK Window::WindowWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam) { Window* pThis = get_window(hwnd); if (!pThis) pThis = create_controller(hwnd); if (pThis) { switch(nmsg) { case WM_COMMAND: return pThis->Command(LOWORD(wparam), HIWORD(wparam)); case WM_NOTIFY: return pThis->Notify(wparam, (NMHDR*)lparam); case WM_NOTIFYFORMAT: return NFR_CURRENT; case WM_CREATE: return pThis->Init((LPCREATESTRUCT)lparam); case WM_NCDESTROY: delete pThis; return 0; default: return pThis->WndProc(nmsg, wparam, lparam); } } else return DefWindowProc(hwnd, nmsg, wparam, lparam); }
LRESULT CALLBACK Window::PropSheetCBTHookProc(int code, WPARAM wparam, LPARAM lparam) { if (code == HCBT_CREATEWND) { HWND hwnd = (HWND)wparam; // create Window controller and associate it with the window handle Window* child = get_window(hwnd); if (!child) child = create_controller(hwnd); } return CallNextHookEx(s_hcbtHook, code, wparam, lparam); }
int main(int argc, char *argv[]) { /* parse command line args */ for (int i = 1; i+1 < argc; i+=2) { if (strcmp(argv[i], "-m") == 0) mazefile = argv[i+1]; else if (strcmp(argv[i], "-a") == 0) algfile = argv[i+1]; } /* initialize program */ if (algfile && !load_algorithm(algfile, &algorithm)) { fprintf(stderr, "error loading algorithm\n"); return 1; } if (!parse_maze(mazefile, &maze)) { fprintf(stderr, "error reading maze file\n"); return 1; } view = create_view(); controller = create_controller( &view, &maze, &mouse, &algorithm); /* run program */ while(!controller.quit) { do_command( &controller, getchar() ); } /* cleanup */ view.destroy(); return 0; }
INT_PTR CALLBACK Window::DialogProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam) { Window* pThis = get_window(hwnd); if (pThis) { switch(nmsg) { case WM_COMMAND: SetWindowLong(hwnd, DWL_MSGRESULT, (LPARAM)pThis->Command(LOWORD(wparam), HIWORD(wparam))); return TRUE; // message has been processed case WM_NOTIFY: pThis->Notify(wparam, (NMHDR*)lparam); return TRUE; // message has been processed case WM_NOTIFYFORMAT: SetWindowLong(hwnd, DWLP_MSGRESULT, NFR_CURRENT); // set return value NFR_CURRENT return TRUE; // message has been processed case WM_NCDESTROY: delete pThis; return TRUE; // message has been processed default: return pThis->WndProc(nmsg, wparam, lparam); } } else if (nmsg == WM_INITDIALOG) { pThis = create_controller(hwnd); if (pThis) return pThis->Init(NULL); return TRUE; } return FALSE; // message has not been processed }
void XboxdrvMain::run() { m_controller = create_controller(); m_controller->set_disconnect_cb(boost::bind(&XboxdrvMain::on_controller_disconnect, this)); init_controller(m_controller); if (m_opts.instant_exit) { usleep(1000); } else { ControllerSlotConfigPtr config_set; if (m_opts.no_uinput) { if (!m_opts.quiet) { std::cout << "Starting without uinput" << std::endl; } } else { log_debug("creating UInput"); m_uinput.reset(new UInput(m_opts.extra_events)); m_uinput->set_device_names(m_opts.uinput_device_names); m_uinput->set_device_usbids(m_opts.uinput_device_usbids); log_debug("creating ControllerSlotConfig"); config_set = ControllerSlotConfig::create(*m_uinput, 0, m_opts.extra_devices, m_opts.get_controller_slot()); // After all the ControllerConfig registered their events, finish up // the device creation log_debug("finish UInput creation"); m_uinput->finish(); } if (!m_opts.quiet) { std::cout << "\nYour Xbox/Xbox360 controller should now be available as:" << std::endl << " /dev/input/js" << m_jsdev_number << std::endl << " /dev/input/event" << m_evdev_number << std::endl; if (m_opts.silent) { std::cout << "\nPress Ctrl-c to quit" << std::endl; } else { std::cout << "\nPress Ctrl-c to quit, use '--silent' to suppress the event output" << std::endl; } } { ControllerThread thread(m_controller, config_set, m_opts); log_debug("launching thread"); pid_t pid = 0; if (!m_opts.exec.empty()) { pid = spawn_exe(m_opts.exec); g_child_watch_add(pid, &XboxdrvMain::on_child_watch_wrap, this); } log_debug("launching main loop"); g_main_loop_run(m_gmain); m_controller.reset(); } if (!m_opts.quiet) { std::cout << "Shutdown complete" << std::endl; } } }