hallo,
ich habe einen nicht-modalen dialog nach folgender anleitung gemacht: Link
der dialog wird im debug modus zumindest ausgeführt, stürzt aber beim beenden, sprich senden eines IDOK oder IDCANCEL ab. nach erstellen im release mode stürzt das programm schon beim doppelklick event ab.
Nicht-modale klasse CDisplayControl.h
Nicht-modale klasse CDisplayControl.cpp
Hauptklasse CWiwoDlg.h
Hauptklasse CWiwoDlg.cpp
anstelle der registrierten windows message bei OnOK() habe ich auch versucht einfach nur die Methode DestroyWindow() aufzurufen, doch auch das hat nichts gebracht. liegt das vielleicht an meinem aufruf in der doppelklick methode für die linke maustaste? das dürfte doch eigentlich kein problem sein oder doch?
ich habe einen nicht-modalen dialog nach folgender anleitung gemacht: Link
der dialog wird im debug modus zumindest ausgeführt, stürzt aber beim beenden, sprich senden eines IDOK oder IDCANCEL ab. nach erstellen im release mode stürzt das programm schon beim doppelklick event ab.
Nicht-modale klasse CDisplayControl.h
Code:
private:
CWnd* m_pParent;
UINT m_wCloseMsg;
public:
CDisplayControl(CWnd* pParent = NULL); // Standardkonstruktor
static const char* GetMsgString();
Code:
CDisplayControl::CDisplayControl(CWnd* pParent /*=NULL*/)
: CDialog(CDisplayControl::IDD, pParent)
{
m_pParent = pParent;
// WINDOWS-Nachricht registrieren
m_wCloseMsg = ::RegisterWindowMessage(GetMsgString());
}
const char* CDisplayControl::GetMsgString()
{
return "CloseNonModalDlg";
}
void CDisplayControl::OnOK()
{
m_pParent->SendMessage(m_wCloseMsg, IDOK, NULL);
CDialog::OnOK();
}
Hauptklasse CWiwoDlg.h
Code:
private:
CDisplayControl* m_pDisplayControl;
static UINT m_wCloseMsg;
protected:
afx_msg long OnNonModClosed(UINT wReason, LONG lParam);
Code:
// Nachricht für Datenaustausch mit nicht-modalem Dialog registrieren
UINT CWiwoDlg::m_wCloseMsg = RegisterWindowMessage(CDisplayControl::GetMsgString());
BEGIN_MESSAGE_MAP(CWiwoDlg, CDialog)
ON_REGISTERED_MESSAGE(m_wCloseMsg, OnNonModClosed)
END_MESSAGE_MAP()
CWiwoDlg::CWiwoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWiwoDlg::IDD, pParent)
{
m_pDisplayControl = NULL;
}
CWiwoDlg::~CWiwoDlg()
{
delete m_pDisplayControl;
}
void CWiwoDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CRect rect = m_pGraph->CalcDataArea();
BOOL bFlag = CheckRect(point, rect);
if(bFlag == TRUE)
{
// Falls Dialog noch nicht erstellt ist
if (m_pDisplayControl == NULL)
{
// Dialog-Objekt erstellen
m_pDisplayControl = new CDisplayControl(this);
// Dialog erstellen und anzeigen
m_pDisplayControl->Create(CDisplayControl::IDD);
m_pDisplayControl->ShowWindow(SW_NORMAL);
}
}
CDialog::OnLButtonDblClk(nFlags, point);
}
LONG CWiwoDlg::OnNonModClosed(UINT wReason, LONG lParam)
{
// Dialog zerstören
m_pDisplayControl->DestroyWindow();
// und Dialog-Objekt löschen
delete m_pDisplayControl;
m_pDisplayControl = NULL;
return 0L;
}
anstelle der registrierten windows message bei OnOK() habe ich auch versucht einfach nur die Methode DestroyWindow() aufzurufen, doch auch das hat nichts gebracht. liegt das vielleicht an meinem aufruf in der doppelklick methode für die linke maustaste? das dürfte doch eigentlich kein problem sein oder doch?
Zuletzt bearbeitet: