2016-10-27 7 views
2

私のコードでCFileDialogを使用している問題に直面しています。CFileDialogを使用してファイルを選択するときの描画の問題

ModalDialogからCFileDialogを呼び出すと、ファイルを選択できます。 現在のビューを終了してもう一度開くと、私のModalDialogの背景全体が消去されます。

手順に従っ:

  1. メインダイアログ
  2. ModalDialog
  3. がModalDialogを再度開き
  4. 出口ModalDialog
  5. ファイル選択のための CFileDialogを開設開設[背景を消去します]

注:この問題は、ファイルを選択した場合にのみ発生します。 CFileDialogのキャンセルをクリックした場合。問題はありません。

PFB、私CFileDialog使用のコードスニペット:

//This is the code to Open the DoModal dialog from MainWindow 
// 
void CCommonDlg::OnBnClickedButton1() 
{ 

    COSDADlg dlg; 
    //m_pMainWnd = &dlg; 
    INT_PTR nResponse = dlg.DoModal(); 
    if (nResponse == IDOK) 
    { 

    } 
    else if (nResponse == IDCANCEL) 
    { 
     // TODO: Place code here to handle when the dialog is 
     // dismissed with Cancel 
    } 

} 

// This is the code for open CFileDialog from ModalDialog to save file 
// 
void COSDADlg::OnBnClickedButton1() 
{ 

     CFileDialog dlgFile(FALSE); 

     CString fileName; 
     dlgFile.GetOFN().lpstrFile = fileName.GetBuffer(FILE_LIST_BUFFER_SIZE); 
     dlgFile.GetOFN().nMaxFile = FILE_LIST_BUFFER_SIZE; 


     INT_PTR nResult = dlgFile.DoModal(); 
     fileName.ReleaseBuffer(); 

} 

//This is the code to paint the background image for ModalDialog 
// 
void COSDADlg::OnPaint() 
{ 
    CPaintDC dc(this); // device context for painting 

    Graphics graph(dc.m_hDC); 
    CRect rt; 
    GetWindowRect(&rt); 
    graph.DrawImage(m_pImage, (INT)0, (INT)0, (INT)rt.Width() , (INT)rt.Height()); 
    DefWindowProc(WM_PAINT, (WPARAM)dc.m_hDC, (LPARAM)0); 

} 
+2

DefWindowProc(WM_PAINT、(WPARAM)dc.m_hDC、(LPARAM)0); '私に怪しげに見えます。 –

+0

@MichaelWalz:私はDefWindowProc関数を削除する提案をしました。しかし、それは問題を解決していない、 それの外観から、私はこれは画家との問題ではないと思う。 CFileDialogにもっと関連しているようです。 私はCFileDialogを取り消すだけで、これを繰り返すことはできません。むしろ私はそれからファイルを選択して保存するときだけです。 –

+0

コードにバグがありますが、私たちはそれを見ることはできません。あなたの 'WM_PAINT'ハンドラからウィンドウプロシージャを呼び出すという事実は、MFCがどのように動作するかという、驚くべき理解の欠如を表示します。これがあなたの唯一のバグだったら私は驚くだろう。 – IInspectable

答えて

2

私は問題の背後にある理由を発見しました。

CFileDialogを使用してファイルを保存/選択すると、デフォルトでは実行中のプロセスのWorkingDirectoryが変更されます。

このため、新しい場所に背景画像が見つかりませんでした。そのため、背景が消去されました。

これが起こらないようにするには、作業ディレクトリを保持するCFileDialogでOFN_NOCHANGEDIRフラグを使用する必要があります。

関連する問題