2010年1月13日 星期三

CuEdit - provides the functionality of a Windows edit control.

// 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! 看不到多型 繼承後也沒任何好處!

4 則留言:

  1. new 完沒 delete 會不會 memory leak 呢?

    new 完 沒delete 當然會丫,

    如果你是問 Create 完 沒有 DestroyWindow 會不會 memory leak! 答: 不會!

    原因在 CuWnd 的解構式裡會自動呼叫 DestroyWindow(); 而 CuEdit 本身 並沒有任何配置出來的資源

    回覆刪除
  2. .modify GetWindowText 補上 delete

    回覆刪除
  3. 您的String 是傳參考過來,除非在實做 = 時是「Copy data過去」而非「copy address過去」,不然 delete 掉後,另一邊一讀那個 String 就會 access violation 了喔!

    回覆刪除
  4. String 是 std::string 本身裡面 確實有 拷貝 運算子, 不用太擔心地!

    回覆刪除