2013-03-21 58 views
4

我正在使用MyPrintDialog扩展CPrintDialog。 问题是: 应用程序尝试打开“打印”对话框时,MyPrintDialog的OnInitDialog()方法在第一次不会被调用。CPrintDialog :: OnInitDialog不会每次调用

我想从OnInitDialog()方法设置打印对话框中的打印机名称。 打印机名称由用户在我想用于打印的应用程序中指定。

我的OnInitDialog()方法

CComboBox *wndCmbBox = (CComboBox *)GetDlgItem(IDC_PER_USER); /*IDC_PER_USER which is ID of Prin Dialog combo */ 
if(wndCmbBox != NULL) 
{ 
    wndCmbBox->SelectString(-1, PrinterName); 
} 

或者是他们的任何方式来设置用户选择打印机名称在打印对话框..?

请说明。

编辑

是,通过的OnInit()我的意思是OnInitDialog()

我使用VS 2012与Win7的32位。我只面对DoModel()这个问题。下一个连续DoModel()方法调用OnInitDialog()。 我已经调试的问题,并发现了一些

INT_PTR CALLBACK AfxDlgProc(HWND hWnd, UINT message, WPARAM, LPARAM) 
{ 
    if (message == WM_INITDIALOG) 
    { 
     // special case for WM_INITDIALOG 
     CDialog* pDlg = DYNAMIC_DOWNCAST(CDialog, CWnd::FromHandlePermanent(hWnd)); 
     if (pDlg != NULL) 
      return pDlg->OnInitDialog(); 
     else 
      return 1; 
    } 
    return 0; 
} 

以上是DLGCORE.CPP的功能。当问题被复制时,我观察到DYNAMIC_DOWNCAST返回NULL

请注意,我已经定制了CPrintDialog并在其中添加了一个复选框。我怀疑它是否会造成这个问题。

+0

您可以显示何时以及如何创建模态对话框? – 2013-03-22 05:45:59

+0

另外,如果使用提供的CPrintDialog而不是定制版本,它是否也具有相同的行为方式?所以,你有没有证实你的定制是*不是*责备? – 2013-03-22 05:51:17

+0

请在[this]找到文件(https://docs.google.com/file/d/0B1cKJCC6FFs6SzBlMHhGTi16dzQ/edit?pli=1)位置 – 2013-03-22 06:31:03

回答

0

如果您的意思是说OnInitDialog()而不是OnInit(),那么可能是您的问题由this MSKB article解释,尽管它看起来在VC6 SP1之后已经修复。

+0

我试过你的建议。但它没有解决问题。请参阅编辑部分了解更多详情。 – 2013-03-22 05:41:43

+0

您的编辑并不表明您尝试了Roger的建议......当您设置消息钩子时出了什么问题?你记得静态链接到MFC吗? – 2013-03-22 05:46:05

+0

我尝试了罗杰的建议。即使在设置钩子并静态链接到MFC onInitDialog()后,也不会在第一次调用。 – 2013-03-22 05:52:04