如题,当OnInitialUpdate()函数被调用时,视图这个窗口是否已经被创建?
因为我要在这个OnInitialUpdate()使用窗口句柄来初始化DirectInput,而如果窗口未被创建好,那窗口句柄肯定是无效的。而我目前写的程序,就是在这个函数里创建DirectInput时设备查失败,怀疑和这个视图窗口句柄有关。有朋友知道么??

解决方案 »

  1.   

    在OnInitialUpdate()中得到m_hWnd应该是没有问题的
    Called by the framework after the view is first attached to the document, but before the view is initially displayed. 
      

  2.   


    那就很奇怪了,我用主窗口的句柄,即:AfxGetMainWnd()->GetSafeHwnd()就不会有问题,
    偏偏用视图的窗口句柄,即:GetSafeHwnd() 就不行。。主窗口和视图窗口同样都是窗口,为何视图的这个窗口句柄就不起作用0_0
      

  3.   

    OnInitialUpdate()取本窗体句柄是安全的,一直这么取。
      

  4.   

    我查到了这么一条说法:发现是因为OIS调用IDirectInputDevice8::SetCooperativeLevel时失败所置(返回E_HANDLE)。查了一下MSDN,发现SetCooperativeLevel的hWnd参数必须是一个valid 的top level window的句柄! 把传给OIS的"WINDOW"参数改成 StringConverter::toString((unsigned long)AfxGetMainWnd()->GetSafeHwnd())就OK了top level window的句柄?视图窗口的句柄如何做到?
      

  5.   

    我下载了一个网上的和我使用同样结构的DX+MFC单文档DEMO,试了一下,结果同样是这个问题。
    另外也在网上贴子中看到了和我同样问题,看来这个MFC的视图窗口,他的这种非“top level window”句柄是不能用了。我目前也不知道如何设置这种句柄属性。
    我在《吉安娜的远征》源码中看到别人未使用到视图文档类,而是创建的非文档视图结构的单文档项目,即他的视图窗口是继承CWnd的。这种视图窗口的句柄应该没有问题。