// provides the functionality of a Windows edit control.
CuEdit gEdit;
gEdit.Create( WS_VISIBLE|WS_CHILD| WS_BORDER,
CuRect(0, 0, 40 * 2 , 14 * 2), hWnd, (UINT)1);
gEdit.SetWindowText(TEXT("HI Edit"));
String strText;
gEdit.GetWindowText(strText);
// CuEdit.h
class CuEdit
{
CuWnd m_EditWnd;
public:
CuEdit(void);
~CuEdit(void);
virtual BOOL Create( DWORD dwStyle, const RECT& rect,
HWND hParentWnd, UINT nID );
void SetWindowText( LPCTSTR lpszString );
void GetWindowText( String& rString ) const;
};
// CuEdit.cpp
CuEdit::CuEdit(void)
{
}
CuEdit::~CuEdit(void)
{
}
BOOL CuEdit::Create( DWORD dwStyle, const RECT& rect,
HWND hParentWnd, UINT nID )
{
return m_EditWnd.CreateEx(WS_EX_CLIENTEDGE, TEXT("EDIT"),
TEXT(""), dwStyle, rect, hParentWnd, nID);
}
void CuEdit::SetWindowText( LPCTSTR lpszString )
{
::SetWindowText( m_EditWnd.GetSafeHwnd(), lpszString );
}
void CuEdit::GetWindowText( String& rString ) const
{
int nLenght = ::GetWindowTextLength( m_EditWnd );
TCHAR *pszBuffer = new TCHAR[nLenght + 1];
::GetWindowText(m_EditWnd , pszBuffer, nLenght);
rString = pszBuffer;
delete [] pszBuffer;
}
沒打算繼承CuWnd! 看不到多型 繼承後也沒任何好處!
2010年1月13日 星期三
CuEdit - provides the functionality of a Windows edit control.
訂閱:
張貼留言 (Atom)
new 完沒 delete 會不會 memory leak 呢?
回覆刪除new 完 沒delete 當然會丫,
如果你是問 Create 完 沒有 DestroyWindow 會不會 memory leak! 答: 不會!
原因在 CuWnd 的解構式裡會自動呼叫 DestroyWindow(); 而 CuEdit 本身 並沒有任何配置出來的資源
.modify GetWindowText 補上 delete
回覆刪除您的String 是傳參考過來,除非在實做 = 時是「Copy data過去」而非「copy address過去」,不然 delete 掉後,另一邊一讀那個 String 就會 access violation 了喔!
回覆刪除String 是 std::string 本身裡面 確實有 拷貝 運算子, 不用太擔心地!
回覆刪除