2013-03-21 60 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