MFC开发过程中,自定义的类中做分割窗口的图像显示,GetDC出现问题:function does not take 0 parameters?

        做MFC分割窗口时,其中含有视类CxxVew窗口,含有General Class (自定义的类CMyXX),在CMyXX中使用GetDC时:

        CDC* pDC = GetDC();

        出现标题中的问题,因为自己没有指定此设备上下文环境是哪个窗口的(没有获取某个窗口的句柄),即编译器不知道在哪个窗口对象中获取DC,且自定义的类又不是从CWnd类派生,所以程序会默认调用Windows Api中的GetDC函数:

        WINUSERAPI

        HDC 

        WINAPI

        GetDC( HWND hWnd );

        Windows Api函数原型中形参必须是某个窗口的句柄,不能为空,所以会出现标题中的错误,那么如何将视类窗口的指针传递给自定义的类中去使用呢?

解决方案:

        在自定义的类MyXX.h 头文件声明一个CWnd* 指针变量p_WndView,再声明一个函数:void SetWindowWnd(CWnd* pWnd),在cpp文件中实现这个函数:

        void  CMyXX::SetWindowWnd(CWnd* pWnd)

        {

                p_WndView = pWnd;

        }

        在CxxView的头文件中包含MyXX.h这个头文件,且声明一个public的CMyXX的对象变量m_xx,然后在CxxVew.cpp中就可以使用m_xx.SetWindowWnd(this)来传递这个视图窗口的指针到CMyXX中的p_WndView变量中,在MyXX.cpp中就可以在图像显示的函数中使用:

        CDC* pDC = p_WndView->GetDC();

        获取视类窗口的设备上下文指针,进而获取句柄,接下来的操作就简单了

 

你可能感兴趣的:(mfc视类窗口指针传递,mfc,c++)