在VC中,通过控件工具箱,可以方便地插入原生控件,实现类、控件变量和方法。而想实现自绘控件及实现响应函数,需要稍微复杂一些。

1 新建工程:Assistants

上述对话框确定后,勾选”基于对话框“,确定后生成以下头文件和实现文件:

2 新建自绘控制类

3 自绘命令按钮控件

3.1 控件属性和大小设置、绘制方法声明

// Bu:

class ButtonEx

{

public:

void SetRect(CRect rc);

void Draw(CPaintDC* pDC);

Private:

CRect m_rc; //位置大小

COLORREF m_rgb; //背景颜色

};

3.2 控件大小设置、绘制方法实现

// Bu:

ButtonEx::ButtonEx()

{

m_rgb = RGB(255,0,0);

}

void ButtonEx::SetRect(CRect rc)

{

m_rc = rc;

}

void ButtonEx::Draw(CPaintDC* pDC)

{

pDC->FillSolidRect(m_rc, m_rgb);

}

3.3 在主类头文件中包含控件类头文件及控件类实例化

// A : header file

#include "Bu"

class CAssistantsDlg : public CDialog

{

public:

CAssistantsDlg(CWnd* pParent = NULL);

ButtonEx m_btn;

};

3.4 在主类实现文件中实现控件大小及绘制控件

// A

BOOL CAssistantsDlg::OnInitDialog()

{

CDialog::OnInitDialog();

m_b(CRect(CPoint(100,100),CSize(100,25)));

return TRUE;

}

void CAssistantsDlg::OnPaint()

{

CPaintDC dc(this); // device context for painting

m_b(&dc);

}

4 控件类鼠标方法的声明与实现

class ButtonEx

{

public:

……

int MouseMove(CPoint pt); //鼠标移动

int LeftDown(CPoint pt); //左键按下

int LeftUp(CPoint pt); //左键弹起

……

};

// Bu:

int ButtonEx::MouseMove(CPoint pt)

{

i(pt))

{

m_rgb = RGB(0,0,255);

}

else

{

m_rgb = RGB(255,0,0);

}

return 1;

}

int ButtonEx::LeftDown(CPoint pt)

{

i(pt))

{

m_rgb = RGB(0,255,0);

return 1;

}

return 0;

}

int ButtonEx::LeftUp(CPoint pt)

{

i(pt))

{

m_rgb = RGB(255,0,0);

return 1;

}

return 0;

}

5 在主类中实现鼠标事件

// A :

……

virtual BOOL OnInitDialog();

……

afx_msg void OnMouseMove(UINT nFlags, CPoint point);

afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

afx_msg void OnLButtonUp(UINT nFlags, CPoint point);

afx_msg BOOL OnEraseBkgnd(CDC* pDC);

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

// A

BEGIN_MESSAGE_MAP(CAssistantsDlg, CDialog)

//{{AFX_MSG_MAP(CAssistantsDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_WM_MOUSEMOVE()

ON_WM_LBUTTONDOWN()

ON_WM_LBUTTONUP()

ON_WM_ERASEBKGND()

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

// A :

void CAssistantsDlg::OnMouseMove(UINT nFlags, CPoint point)

{

m_b(point);

Invalidate();

CDialog::OnMouseMove(nFlags, point);

}

BOOL CAssistantsDlg::OnEraseBkgnd(CDC* pDC)

{

return true;

}

void CAssistantsDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

i(point))

{

Invalidate();

return;

}

CDialog::OnLButtonDown(nFlags, point);

}

void CAssistantsDlg::OnLButtonUp(UINT nFlags, CPoint point)

{

i(point))

{

Invalidate();

ShellExecute(this->m_hWnd, "open", "C:\\Program Files\\Google\\Chrome\\Application\\c;, ";, NULL, SW_SHOW);

return;

}

CDialog::OnLButtonUp(nFlags, point);

}

全部源代码见:

参考:

-End-

1.《vc如何更改控件属性》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《vc如何更改控件属性》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3238712.html