VC编程之实现CWnd类的自定义,并实现自定义控件
小标 2018-09-04 来源 : 阅读 1856 评论 0

摘要:本文主要向大家介绍了VC编程之实现CWnd类的自定义,并实现自定义控件,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之实现CWnd类的自定义,并实现自定义控件,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本例实现一个ColorWnd类,实现通过鼠标单击,刷新不同的颜色背景。


class CColorWnd : public CWnd
{
 DECLARE_DYNAMIC(CColorWnd)

public:
 CColorWnd();
 virtual ~CColorWnd();
 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 afx_msg void OnPaint();

protected:
 DECLARE_MESSAGE_MAP()

public:
 BOOL Create(CRect rcLayout,CWnd *pParenWnd,UINT nID,DWORD dwStyle = WS_CHILD|WS_VISIBLE); 
 
};


MPLEMENT_DYNAMIC(CColorWnd, CWnd)

CColorWnd::CColorWnd()
{

}

CColorWnd::~CColorWnd()
{

}

BEGIN_MESSAGE_MAP(CColorWnd, CWnd)
 ON_WM_PAINT()
 ON_WM_SIZE()
 ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

BOOL CColorWnd::PreCreateWindow(CREATESTRUCT& cs)
{
 WNDCLASS wndcls;
 memset(&wndcls, 0, sizeof(WNDCLASS));

 wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE;
 wndcls.lpfnWndProc = ::DefWindowProc; 
 wndcls.hInstance = AfxGetInstanceHandle();
 wndcls.hIcon =  NULL; 
 wndcls.hCursor =NULL;
 wndcls.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
 wndcls.lpszMenuName = NULL;
 wndcls.lpszClassName = _T("ColorWnd");
 if(!AfxRegisterClass(&wndcls))
 {
  TRACE("Class Registration Failed!\n");
  return FALSE;
 }
 cs.lpszClass = wndcls.lpszClassName;

 return CWnd::PreCreateWindow(cs);
}

BOOL CColorWnd::Create(CRect rcLayout,CWnd *pParenWnd,UINT nID,DWORD dwStyle)
{
 if (rcLayout.Width() < 50)
 {
  rcLayout.right += 40;
 }
 LPCTSTR lpszClassName = AfxRegisterWndClass(NULL,LoadCursor(NULL, IDC_ARROW),(HBRUSH)GetStockObject(NULL_BRUSH));

 return CWnd::Create(lpszClassName,NULL,dwStyle,rcLayout,pParenWnd,nID,NULL);
}

void CColorWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
 Invalidate(TRUE);

 CWnd::OnLButtonDown(nFlags, point);
}

void CColorWnd::OnPaint()
{
 CPaintDC dc(this);
 CRect rcWnd;
 GetWindowRect(&rcWnd);
 rcWnd.SetRect(0,0,rcWnd.Width(),rcWnd.Height());

 int nRed = rand()%255;
 int nBlue = rand()%255;
 
 CBrush brush(RGB(nRed,nBlue,0));
 dc.FillRect(rcWnd,&brush);
 brush.DeleteObject(); 
}


CColorWnd m_ColorWnd;

m_ColorWnd.Create(CRect(300,150,350,180),this,1202);

通过鼠标单击m_ColorWnd的区域,实现自动刷新背景色! 本例是Dialog工程。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved