//----------------------------------------------------------------------------- // Name: OnInitialUpdate() // Desc: When the AppForm object is created, this function is called to // initialize it. Here we getting access ptrs to some of the controls, // and setting the initial state of some of them as well. //----------------------------------------------------------------------------- VOID CAppForm::OnInitialUpdate() { // Update the UI CFormView::OnInitialUpdate(); InitializeUIControls(); // Save static reference to the render window m_hwndRenderWindow = GetDlgItem(IDC_RENDERVIEW)->GetSafeHwnd(); // Register a class for a fullscreen window WNDCLASS wndClass = { CS_HREDRAW | CS_VREDRAW, FullScreenWndProc, 0, 0, NULL, NULL, NULL, (HBRUSH)GetStockObject(WHITE_BRUSH), NULL, _T("Fullscreen Window") }; RegisterClass( &wndClass ); // We create the fullscreen window (not visible) at startup, so it can // be the focus window. The focus window can only be set at CreateDevice // time, not in a Reset, so ToggleFullscreen wouldn't work unless we have // already set up the fullscreen focus window. m_hwndRenderFullScreen = CreateWindow( _T("Fullscreen Window"), NULL, WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, GetTopLevelParent()->GetSafeHwnd(), 0L, NULL, 0L ); // Note that for the MFC samples, the device window and focus window // are not the same. CD3DApplication::m_hWnd = m_hwndRenderWindow; CD3DApplication::m_hWndFocus = m_hwndRenderFullScreen; CD3DApplication::Create( AfxGetInstanceHandle() ); }
/// <summary> /// Handle windows messages for the 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 CALLBACK CKinectFusionExplorer::DlgProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: { // Bind application window handle m_hWnd = hWnd; InitializeUIControls(); // Init Direct2D D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pD2DFactory); int width = m_params.m_cDepthWidth; int height = m_params.m_cDepthHeight; // Create and initialize a new Direct2D image renderer (take a look at ImageRenderer.h) // We'll use this to draw the data we receive from the Kinect to the screen m_pDrawDepth = new ImageRenderer(); HRESULT hr = m_pDrawDepth->Initialize( GetDlgItem(m_hWnd, IDC_DEPTH_VIEW), m_pD2DFactory, width, height, width * sizeof(long)); if (FAILED(hr)) { SetStatusMessage(L"Failed to initialize the Direct2D draw device."); m_bInitializeError = true; } m_pDrawReconstruction = new ImageRenderer(); hr = m_pDrawReconstruction->Initialize( GetDlgItem(m_hWnd, IDC_RECONSTRUCTION_VIEW), m_pD2DFactory, width, height, width * sizeof(long)); if (FAILED(hr)) { SetStatusMessage(L"Failed to initialize the Direct2D draw device."); m_bInitializeError = true; } m_pDrawTrackingDataAssociation = new ImageRenderer(); hr = m_pDrawTrackingDataAssociation->Initialize( GetDlgItem(m_hWnd, IDC_DATAASSOCIATION_VIEW), m_pD2DFactory, width, height, width * sizeof(long)); if (FAILED(hr)) { SetStatusMessage(L"Failed to initialize the Direct2D draw device."); m_bInitializeError = true; } if (FAILED(m_processor.SetWindow(m_hWnd, WM_FRAMEREADY, WM_UPDATESENSORSTATUS)) || FAILED(m_processor.SetParams(m_params)) || FAILED(m_processor.StartProcessing())) { m_bInitializeError = true; } } break; // If the title bar X is clicked, destroy app case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: // Quit the main message pump m_processor.StopProcessing(); PostQuitMessage(0); break; // Handle button press case WM_COMMAND: ProcessUI(wParam, lParam); break; // Handle sliders case WM_HSCROLL: UpdateHSliders(); break; case WM_NOTIFY: { const NMHDR* pNMHeader = reinterpret_cast<const NMHDR*>(lParam); if (pNMHeader->code == NSCN_REFRESH && pNMHeader->idFrom == IDC_SENSORCHOOSER) { m_processor.ResolveSensorConflict(); } } break; case WM_FRAMEREADY: HandleCompletedFrame(); break; case WM_UPDATESENSORSTATUS: if (m_pSensorChooserUI != nullptr) { m_pSensorChooserUI->UpdateSensorStatus(static_cast<DWORD>(wParam)); } break; } return FALSE; }