left of '->GetStatus' must point to class/struct/union/generic type

LRESULT CALLBACK PlayWindow::PlayWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)//這是一個static成員函數
{
 switch (uMsg)
 {
 case WM_LBUTTONDOWN:
       if(m_pIPlayCtrl->GetStatus() == 3)
      {
           m_pIPlayCtrl->Pause();
      }
     break;
 default:
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
 return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

由於PlayWindowProc是窗口過程,在類中定義成static成員函數,m_pIPlayCtrl是非static變量,訪問出現問題。

解決該問題:可以在static成員函數PlayWindowProc變爲非static成員函數,另外添加一個static成員函數__PlayWindowProc,調用PlayWindowProc,這樣PlayWindowProc就可以訪問非static成員了。如下所示:

LRESULT CALLBACK PlayWindow::__PlayWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 PlayWindow* pThis = reinterpret_cast<PlayWindow*>(GetWindowLong(hWnd, GWL_USERDATA));
 if(pThis)
 {
  return pThis->PlayWindowProc(hWnd, uMsg, wParam, lParam);
 }
 return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

//視頻播放窗口的過程函數////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK PlayWindow::PlayWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

 switch (uMsg)
 {
 case WM_LBUTTONDOWN:
   
  if(m_pIPlayCtrl->GetStatus() == 3)
     {
         m_pIPlayCtrl->Pause();
     }
      break;
 default:
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
 return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章