/// <summary> /// Enumerate and construct all the sensors when the app starts up /// </summary> void CMainWindow::EnumerateSensors() { int iCount = 0; HRESULT hr = NuiGetSensorCount(&iCount); if (FAILED(hr)) { return; } for (int i = 0; i < iCount; ++i) { INuiSensor* pNuiSensor = nullptr; if (SUCCEEDED(NuiCreateSensorByIndex(i, &pNuiSensor))) { UpdateMainWindow(pNuiSensor->NuiDeviceConnectionId(), pNuiSensor->NuiStatus()); } SafeRelease(pNuiSensor); } }
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION , CW_USEDEFAULT, 0, currentdesign.tori->width, currentdesign.tori->height, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } hWndMain = hWnd; HDC hdc = GetDC(hWndMain); LoadImageToDC(hdc,currentdesign); ReleaseDC(hWndMain,hdc); ShowWindow(hWnd, nCmdShow); UpdateMainWindow(TRUE); FixWindowSizeToFudaSize(); return TRUE; }
/// <summary> /// Handle windows messages for a class instance /// </summary> /// <param name="hWnd">Window message is for</param> /// <param name="uMsg">Message</param> /// <param name="wParam">Message data</param> /// <param name="lParam">Additional message data</param> /// <returns>result of message processing</returns> LRESULT CMainWindow::DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { // Bind application window handle m_hWnd = hWnd; // Set device status callback to monitor all sensor changes NuiSetDeviceStatusCallback(StatusChangeCallback, reinterpret_cast<void*>(hWnd)); InitializeResource(); } break; case WM_CTLCOLORSTATIC: case WM_CTLCOLORDLG: return (LRESULT)GetStockObject(WHITE_BRUSH); case WM_NOTIFY: switch (LOWORD(wParam)) { case IDC_MOREINFOLINK: OnClickMoreInfoLink(lParam); break; case IDC_KINECTSENSORLIST: return m_pSensorListControl->HandleNotifyMessage(hWnd, (LPNMLISTVIEW)lParam); case IDC_STATUSLOGLIST: return m_pStatusLogListControl->HandleNotifyMessage(hWnd, (LPNMLISTVIEW)lParam); } break; // If the titlebar X is clicked, destroy the app case WM_CLOSE: { m_pKinectWindowMgr->CloseAllKinectWindows(); DestroyWindow(hWnd); } break; // Quit the main message pump case WM_DESTROY: PostQuitMessage(0); break; // Handle the Kinect sensor status change case case WM_UPDATEMAINWINDOW: { UpdateMainWindow((PCWCHAR)wParam, (HRESULT)lParam); UpdateLayoutAndShowStatus(); } break; // If the kinect window is closed, notify Kinect window manager case WM_CLOSEKINECTWINDOW: m_pKinectWindowMgr->ResetKinectWindow((PCWSTR)wParam); break; case WM_SIZE: Resize(); break; case WM_PAINT: DrawBreakLine(); break; case WM_GETMINMAXINFO: { POINT minTrackSize = {m_minTrackWidth, 0}; auto pMinMaxInfo = (PMINMAXINFO)lParam; pMinMaxInfo->ptMinTrackSize = minTrackSize; } break; } return FALSE; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_CREATE: { robinsonp = (char *)robinson; timegoesbyp = (char *)timegoesby; } break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmId) { case IDM_TORISETTINGS: case IDM_YOMISETTINGS: { if(wmId == IDM_TORISETTINGS){ ChangeToriYomi(TORI); }else{ ChangeToriYomi(YOMI); } DialogBox(hInst,MAKEINTRESOURCE(IDD_SETTINGS),hWnd,(DLGPROC)SettingsProc); HDC hdc = GetDC(hWndMain); LoadImageToDC(hdc,currentdesign); ReleaseDC(hWndMain,hdc); } break; case IDM_SAVEASIMAGE: case IDM_YOMIASIMAGE: { if(wmId == IDM_SAVEASIMAGE){ ChangeToriYomi(TORI); }else{ ChangeToriYomi(YOMI); } DialogBox(hInst,MAKEINTRESOURCE(IDD_SAVEIMAGE),hWnd,(DLGPROC)SaveAsImageProc); } break; case IDM_FUDADESIGN: case IDM_YOMIDESIGN: { if(wmId == IDM_FUDADESIGN){ ChangeToriYomi(TORI); HWND hDlg = CreateDialog(hInst,MAKEINTRESOURCE(IDD_FUDADESIGN),hWnd,(DLGPROC)ToriDesignProc); ShowWindow(hDlg,SW_SHOW); }else{ ChangeToriYomi(YOMI); HWND hDlg = CreateDialog(hInst,MAKEINTRESOURCE(IDD_YOMIDESIGN),hWnd,(DLGPROC)YomiDesignProc); ShowWindow(hDlg,SW_SHOW); } } break; case IDM_FUDAOTOSI: { ChangeToriYomi(TORI); CreateFudaOtositorifuda(); if(torifuda_of_fudaotosi.size() == 0){ if(IDYES!=MessageBox(hWnd,"貴方はすでに全ての札を覚えています。\r\nまた最初からやり直しますか?\r\n","確認",MB_YESNO)){ return 0; }; ClearNigateFuda(); CreateFudaOtositorifuda(); } HWND hDlg = CreateDialog(hInst,MAKEINTRESOURCE(IDD_FUDAOTOSI),hWnd,(DLGPROC)FudaOtosiProc); ShowWindow(hDlg,SW_SHOW); } break; case IDM_VERSION: DialogBox(hInst,MAKEINTRESOURCE(IDD_VERSION),hWnd,(DLGPROC)VersionProc); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT:{ hdc = BeginPaint(hWnd, &ps); if(front_structure.hdc != NULL){ int width, height; width = currentdesign.width; height = currentdesign.height; HBITMAP hold1 = (HBITMAP)SelectObject(front_structure.hdc,front_structure.hbmp); HBITMAP hCurrentBMP = CreateCompatibleBitmap(hdc,width,height); HBITMAP hold = (HBITMAP)SelectObject(hdc,hCurrentBMP); BitBlt(hdc,0,0,width,height,front_structure.hdc,0,0,SRCCOPY); SelectObject(hdc,hold); SelectObject(front_structure.hdc,hold1); DeleteObject(hCurrentBMP); } EndPaint(hWnd, &ps); } break; case WM_DESTROY: tori_or_yomi = TORI; SaveToIniFile(0, ¤tdesign); tori_or_yomi = YOMI; SaveToIniFile(0, ¤tdesign); DeleteFile("bg_image\\tori_current.img"); DeleteFile("bg_image\\yomi_current.img"); PostQuitMessage(0); break; case WM_KEYDOWN: { // robinson if(robinsonp != NULL){ if(wParam == *robinsonp){ robinsonp ++; }else{ robinsonp = (char *)robinson; } if(*robinsonp == '\0'){ robinsonp = (char *)robinson; HMODULE hmd = GetModuleHandle("gdiplus.dll"); if(hmd == NULL){ MessageBox(hWnd,"GDI+ には対応していません","(@_@)",MB_OK); }else{ if(!gdiplus_useable){ gdiplus_useable = 1; SetWindowText(hWnd,"GDI+: ON"); }else{ gdiplus_useable = 0; SetWindowText(hWnd,"GDI+: OFF"); } HDC hdc = GetDC(hWndMain); LoadImageToDC(hdc,currentdesign); ReleaseDC(hWndMain,hdc); UpdateMainWindow(FALSE); } } } // timegoesby if(timegoesbyp != NULL){ if(wParam == *timegoesbyp){ timegoesbyp ++; }else{ timegoesbyp = (char *)timegoesby; } if(*timegoesbyp == '\0'){ timegoesbyp = (char *)timegoesby; std::string buf; int maxbpp, minbpp; buf += GetMaxMinDisplayColors(&maxbpp,&minbpp); char b[16]; wsprintf(b,"%d",maxbpp); buf += b; buf += " ビットに変更 -> [はい]\r\n"; wsprintf(b,"%d",minbpp); buf += b; buf += " ビットに変更 -> [いいえ]\r\n"; int r = MessageBox(hWnd,buf.c_str(),"(^θ^)",MB_YESNOCANCEL); if( r == IDYES || r == IDNO){ DEVMODE dv; ZeroMemory(&dv,sizeof(DEVMODE)); dv.dmSize = sizeof(DEVMODE); dv.dmFields = DM_BITSPERPEL; if(r == IDYES){ dv.dmBitsPerPel = maxbpp; }else{ dv.dmBitsPerPel = minbpp; } ChangeDisplaySettings(&dv,0); } } } } break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }