2013-04-04 2 views
0

Я создал класс CSurfaceWnd от CWnd от мастера классов. Я попытался создать окно, но получил ошибку. Вот мой код создания:Как создать производное от CWnd POP UP Window?

if(!m_pSurfaceWnd) 
    { 
     CString m_NameClass = AfxRegisterWndClass(
      CS_VREDRAW | CS_HREDRAW, 
      ::LoadCursor(NULL, IDC_ARROW), 
      (HBRUSH) ::GetStockObject(WHITE_BRUSH), 
      ::LoadIcon(NULL, IDI_APPLICATION)); 
    m_pSurfaceWnd = new CSurfaceWnd; 

    CRect rcTemp; 
    GetWindowRect(rcTemp); 

    VERIFY(m_pSurfaceWnd->CreateEx(WS_EX_CLIENTEDGE, m_NameClass, NULL, WS_POPUP | WS_VISIBLE, rcTemp, mpWnd, 1)); 

    //DWORD dw =GetLastError(); 

    m_pSurfaceWnd->ShowWindow(SW_SHOW); 
} 
else 
    m_pSurfaceWnd->ShowWindow(SW_SHOW); 

Как Вы можете видеть, я создаю всплывающее окно, поэтому я использую CreateEx. Я зарегистрировал класс и в режиме отладки я вижу ряд новых классов в m_NameClass. Но CreateEx вернул false. Пожалуйста, помогите мне. Вероятно, вы увидите некоторую ошибку, которую я не вижу. Пожалуйста, не отправляйте меня в MSDN. Я читал ее много раз. Спасибо

ответ

0

Прежде всего, вы должны проверить, является ли mpWnd действительным объектом.

BOOL isValid = ::IsWindow(mpWnd->GetSafeHwnd()); 

Если mpWnd является недопустимым значением, функция CreateEx вернет 0 из-за стиля WS_POPUP.