1

デスクトップアラートを作成する方法のほとんどの例は、次のようになります。newキーワードを使用して、CMFCDesktopAlertDialogの作成に使用される新しいCMFCDesktopAlertWndを作成します。これらの例はいずれも、関数の最後にあるオブジェクトを削除しないため、何かがメモリの割り当てを解除していると思います。メモリの割り当てを解除するのは何ですか?

CMFCDesktopAlertWnd* pPopup = new CMFCDesktopAlertWnd;
// int m_nAnimation
pPopup->SetAnimationType ((CMFCPopupMenu::ANIMATION_TYPE) m_nAnimation);

// int m_nAnimationSpeed
pPopup->SetAnimationSpeed (m_nAnimationSpeed);

// int m_nTransparency
pPopup->SetTransparency ((BYTE)m_nTransparency);

// BOOL m_bSmallCaption
pPopup->SetSmallCaption (m_bSmallCaption);

// BOOL m_bAutoClose, int m_nAutoCloseTime
pPopup->SetAutoCloseTime (m_bAutoClose ? m_nAutoCloseTime * 1000 : 0);

// int m_nPopupSource
if (m_nPopupSource == 0)
{
   // int m_nVisualMngr
   // CPoint m_ptPopup
   // The this pointer points to a CDesktopAlertDemoDlg class which extends the CDialogEx class.
   if (m_nVisualMngr == 5)  // MSN-style
   {
      pPopup->Create (this, IDD_DIALOG2, NULL, m_ptPopup, RUNTIME_CLASS (CMSNDlg));
   }
   else
   {
      pPopup->Create (this, IDD_DIALOG1, 
      m_menuPopup.GetSubMenu (0)->GetSafeHmenu (), m_ptPopup, RUNTIME_CLASS (CMyPopupDlg));
   }
}
4

2 に答える 2

1

あなたはソースコードを見ることができます:

void CMFCDesktopAlertWnd::OnNcDestroy()
{
    CWnd::OnNcDestroy();
    delete this;
}

ウィンドウが破棄されると、WM_NCDESTROYメッセージは割り当てられたメモリを削除します。

于 2012-05-29T20:54:58.467 に答える
0

Microsoftは、これがメソッドではPostNcDestroy()なく所属する削除を提案しています。削除が早すぎる場合、つまり、OnNcDestroy()comctl32!ComboBox_WndProc()OnNcDestroy().

于 2014-01-24T15:13:11.190 に答える