附源码,200分请求解决资源泄露,谢谢!
附源码,200分请求解决资源泄露,多谢!!
问题描述:此类在实例化后,将出现资源泄露。经查,问题肯定是出在CreateDialogParam上。请教如何修改才能避免在实例化时出现资源泄露呢?
另一100分:http://community.****.net/Expert/TopicView1.asp?id=5498663
头文件:
class CDialog
{
public:
CDialog(UINT uResID, HINSTANCE hInst, HWND hParent = NULL);
CDialog(PCTSTR pszRes, HINSTANCE hInst, HWND hParent = NULL);
virtual ~CDialog();
public:
LRESULT DoModal();
HWND DoModeless();
public:
HWND GetHwnd() const { return m_hDlg; }
HINSTANCE GetHinst() const { return m_hInst; }
protected:
virtual BOOL OnInitDialog();
virtual BOOL OnCommand(UINT uId);
virtual BOOL OnOk();
virtual BOOL OnCancel();
virtual LRESULT OnNotify(WPARAM wParam, LPARAM lParam);
virtual LRESULT OnMessage(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
private:
LRESULT CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
VOID EndDialog(INT_PTR nResult);
private:
HINSTANCE m_hInst;
HWND m_hParent;
HWND m_hDlg;
private:
BOOL m_bModal;
PCTSTR m_pszRes;
COLORREF m_crColor;
private:
HBRUSH m_hBr;
private:
CThunk m_Thunk;
};
实现:
// 预处理
#include "Dialog.h "
#include <CommCtrl.h>
#pragma comment(lib, "ComCtl32.lib ")
// 构造函数
CDialog::CDialog(UINT uResId, HINSTANCE hInst, HWND hParent) : m_pszRes(MAKEINTRESOURCE(uResId)),
m_hInst(hInst), m_hParent(hParent), m_hDlg(NULL), m_bModal(TRUE),
m_crColor(0x000000), m_hBr(NULL)
{
::InitCommonControls();
}
// 析构函数
CDialog::~CDialog()
{
if (m_hBr != NULL)
{
::DeleteObject(m_hBr);
}
EndDialog(0);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// 公有方法
// ------------------------------------------------------------
// 模式对话框
LRESULT CDialog::DoModal()
{
LRESULT nRet = ::DialogBoxParam(m_hInst, m_pszRes, m_hParent,
问题描述:此类在实例化后,将出现资源泄露。经查,问题肯定是出在CreateDialogParam上。请教如何修改才能避免在实例化时出现资源泄露呢?
另一100分:http://community.****.net/Expert/TopicView1.asp?id=5498663
头文件:
class CDialog
{
public:
CDialog(UINT uResID, HINSTANCE hInst, HWND hParent = NULL);
CDialog(PCTSTR pszRes, HINSTANCE hInst, HWND hParent = NULL);
virtual ~CDialog();
public:
LRESULT DoModal();
HWND DoModeless();
public:
HWND GetHwnd() const { return m_hDlg; }
HINSTANCE GetHinst() const { return m_hInst; }
protected:
virtual BOOL OnInitDialog();
virtual BOOL OnCommand(UINT uId);
virtual BOOL OnOk();
virtual BOOL OnCancel();
virtual LRESULT OnNotify(WPARAM wParam, LPARAM lParam);
virtual LRESULT OnMessage(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
private:
LRESULT CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
VOID EndDialog(INT_PTR nResult);
private:
HINSTANCE m_hInst;
HWND m_hParent;
HWND m_hDlg;
private:
BOOL m_bModal;
PCTSTR m_pszRes;
COLORREF m_crColor;
private:
HBRUSH m_hBr;
private:
CThunk m_Thunk;
};
实现:
// 预处理
#include "Dialog.h "
#include <CommCtrl.h>
#pragma comment(lib, "ComCtl32.lib ")
// 构造函数
CDialog::CDialog(UINT uResId, HINSTANCE hInst, HWND hParent) : m_pszRes(MAKEINTRESOURCE(uResId)),
m_hInst(hInst), m_hParent(hParent), m_hDlg(NULL), m_bModal(TRUE),
m_crColor(0x000000), m_hBr(NULL)
{
::InitCommonControls();
}
// 析构函数
CDialog::~CDialog()
{
if (m_hBr != NULL)
{
::DeleteObject(m_hBr);
}
EndDialog(0);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// 公有方法
// ------------------------------------------------------------
// 模式对话框
LRESULT CDialog::DoModal()
{
LRESULT nRet = ::DialogBoxParam(m_hInst, m_pszRes, m_hParent,