今天看了一个用对话框实现打印的程序,有几句看不懂:
void CDTest1Dlg::OnPrintPreview() 
{
// TODO: Add your control notification handler code here
m_nPageCount=4;
m_pFrame = new CPreviewFrame(DrawDlgContentInView,m_nPageCount,this,this,FALSE);
m_pFrame->ShowWindow(SW_SHOW);
m_pFrame->UpdateWindow();
}
这里,DrawDlgContentInView为:
void DrawDlgContentInView(CDC* pDC,CPrintInfo* pInfo,void* pVoid)
{
((CPrintMapDlg*)pVoid)->OnPrint(pDC,pInfo);
}
请问这是什么原因,可以用函数名DrawDlgContentInView作为类CPreviewFrame构造函数的参数
更奇怪的是,当调试的时候,居然跟进了DrawDlgContentInView里面,运行了((CPrintMapDlg*)pVoid)->OnPrint(pDC,pInfo);
请问大家这是什么原因,是回调吗?

解决方案 »

  1.   

    不好意思,确实是函数指针,呵呵
    CPreviewFrame(DRAWFUN pDraw,int nPageCount,CWnd*pOldW,CWnd* pCallW,BOOL bDirect,LPCTSTR stTitle=NULL);
    可问什么我的程序运行不到DrawDlgContentInView里面,((CPrintMapDlg*)pVoid)->OnPrint(pDC,pInfo)从来都没有运行过呢?
      

  2.   

    得CPreviewFrame调用的时候才会调用到((CPrintMapDlg*)pVoid)->OnPrint(pDC,pInfo); 这里啊。
    没有到就是没有调用。
      

  3.   

    http://www.vckbase.com/document/viewdoc/?id=195