2
私のコードでCFileDialog
を使用している問題に直面しています。CFileDialogを使用してファイルを選択するときの描画の問題
ModalDialogからCFileDialog
を呼び出すと、ファイルを選択できます。 現在のビューを終了してもう一度開くと、私のModalDialogの背景全体が消去されます。
手順に従っ:
- メインダイアログ
- ModalDialog
- がModalDialogを再度開き
- 出口ModalDialog
- ファイル選択のための
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);
}
DefWindowProc(WM_PAINT、(WPARAM)dc.m_hDC、(LPARAM)0); '私に怪しげに見えます。 –
@MichaelWalz:私はDefWindowProc関数を削除する提案をしました。しかし、それは問題を解決していない、 それの外観から、私はこれは画家との問題ではないと思う。 CFileDialogにもっと関連しているようです。 私はCFileDialogを取り消すだけで、これを繰り返すことはできません。むしろ私はそれからファイルを選択して保存するときだけです。 –
コードにバグがありますが、私たちはそれを見ることはできません。あなたの 'WM_PAINT'ハンドラからウィンドウプロシージャを呼び出すという事実は、MFCがどのように動作するかという、驚くべき理解の欠如を表示します。これがあなたの唯一のバグだったら私は驚くだろう。 – IInspectable