Re: Как сделать custom control?
От: Patalog Россия  
Дата: 11.09.02 07:02
Оценка:
Здравствуйте Alexander_1983, Вы писали:

A1>Нужно сделать собственный элемент управления и использовать его в SDI приложении, для этого создаю класс элемента управления наследником от CWnd. Поделитесь кто-нибудь кодом для примера.


//h
class CMyCoolControl : public CWnd
{
public:

    CMyCoolControl() { /* Конструктор */}

    //{{AFX_VIRTUAL(CMyCoolControl)
    public:
    virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);

    protected:
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    //}}AFX_VIRTUAL

    //{{AFX_MSG(CMyCoolControl)
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    afx_msg void OnPaint();
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()
};

//cpp
BEGIN_MESSAGE_MAP(CMyCoolControl, CWnd)
    //{{AFX_MSG_MAP(CMyCoolControl)
    ON_WM_ERASEBKGND()
    ON_WM_PAINT()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CMyCoolControl::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
    return CWnd::Create(lpszClassName, NULL, dwStyle, rect, pParentWnd, nID);
}

BOOL CMyCoolControl::OnEraseBkgnd(CDC* pDC) 
{
    CRect rc; GetClientRect(&rc);
    /* Do something */
    return TRUE;
}

BOOL CMyCoolControl::PreCreateWindow(CREATESTRUCT& cs) 
{
    cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, NULL, NULL, NULL);    
    return CWnd::PreCreateWindow(cs);
}

void CMyCoolControl::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
    /* Do something */
}


Пойдет?
Почетный кавалер ордена Совка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.