在mfc工程中,主窗口是用createdialog创建出来的,而它的子窗口是用CWnd派生类创建的,为什么子窗体的WM_PAINT消息可以被派生类获得,而像WM_NCHITTEST和WM_LBUTTONUP等的消息却没有获得呢?是不是消息链没有链接到派生类的对应函数呢?这要怎么做?

解决方案 »

  1.   

    窗体的WM_PAINT消息是自己传递给自己的,因此没有什么机会能错了
    而一般情况下WM_NCHITTEST应该只有主窗口需要吧?个人觉得如果是传递给子窗口他应该能被子窗口获得,关键你确定他被传给子窗口了?
    WM_LBUTTONUP应该可以传给子窗口,
      

  2.   

    BTW:没有任何理由使用所谓的win32+MFC混合模式编程,MFC是应该能涵盖W32模式的一切的,为什么要混合?
      

  3.   

    问题是那个子窗口是以前用mfc开发的,而主窗口也是,现在我把主窗口改成createdialog生成了,以前的子窗口create函数的parent cwnd*我用cwnd::FromHandle(hwnd)变换,程序可以运行,但子窗口的很多消息就不响应了,我想知道原理,为什么会这样
      

  4.   

    有些消息是从主窗口消息循环中route过来的,你把主窗口改了而保留子窗口,一些消息就可能没法被路由过来。
    你把一个“模型”的一个部分给改造了,而希望保留另外一个,就可能破坏整个模型,看不出任何理由应该这么作。
      

  5.   

    有没有什么办法暂时链接一下,让消息流转成功,子窗口我以后也会改成win32开发的。
      

  6.   

    应该是你的主窗口不具备CWnd类的所有特性。
      

  7.   

    我估计只能case by case的看每个消息是怎么流转的,你不可能有非常直接的方式直接搞对了。要是我,我宁愿用win32从头开发,研究这个恐怕是非常耗时的。而与Win32相比,更建议的方式使用MFC开发gui,不知道你为什么选择Win32,难道是觉得mfc太难学?估计你弄明白这个也不得不去学MFC了
    比MFC更先进的估计是wpf了,还不如索性痛苦点,把wpf弄明白去重新开发。用一个老旧的开发模式为模板,用另外一个更老旧的开发模式开发,不一定真的能满足你需求
      

  8.   

    我也是从mfc转过来的,我要求的是速度和准确的定位,因为我这些程序可能要以dll方式操作的是别人的界面,务求最轻量,我甚至没有考虑atl,所以~~~