我的客户程序是一个画图程序,现在我要在ATL中实现的功能是写一个函数,用来获取客户程序中的当前活动视图,并将其内容存为bmp格式的文件,我在客户程序中直接写下面的代码成功了
         CMDIFrameWnd *pFrame = 
             (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd; CMDIChildWnd *pChild = 
             (CMDIChildWnd *) pFrame->GetActiveFrame(); CScribbleView *pView = (CScribbleView *) pChild->GetActiveView();
但是将代码放到ATL服务程序中就失败了(编译通过,但客户程序运行时出错),我改成下面的代码倒是可以获得当前的窗口并保存为bmp,但我要获得的是视图啊,怎么可以获得窗口但不能获得视图呢?
         CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp();
CMDIChildWnd *pChild = (CMDIChildWnd*)pFrame->MDIGetActive(); CView *pView = (CView*)pChild->GetActiveWindow();

解决方案 »

  1.   

    你要获取客户程序的窗口句柄没必要这么麻烦,而且容易出错。你可以设置一个COM组件属性,让客户端设置客户端的窗口相关参数即可。
      

  2.   

    没这么用过,可能是 ATL服务还不支持 Doc /View 架构
      

  3.   

    你的意思是让客户程序获得活动视图的句柄,然后传给ATL服务程序?
      

  4.   

    对,
    另外感觉你是使用MFC开发服务程序。
      

  5.   

    嗯,我的服务程序是支持MFC的,我已经按你的想法去做,已经成功了,感觉这个程序通用性还是很差,没有表现出 COM的优势,现在先把作业交了,以后再慢慢研究,最近上了一门软件构件化的课要交作业,呵呵,谢谢大哥了!!!