VC++在窗口中显示按钮 CButton::Create Button Styles Window Styles

本文详细解析了如何在VC++ MFC框架中使用CButton类创建和显示按钮,涉及窗口类对象、窗口创建及OnCreate函数的应用,展示了在CMainFrame和CTestView类中的按钮创建过程和位置变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

CButton::Create

OnCreate函数(MainFrm.cpp)CMainFrame类:

小结

接上:VC++窗口类、窗口类对象与窗口

接下:VC++Button Styles Window Styles


为了更好地理解窗口类、窗口类对象和窗口之间的关系,接下来实现在窗口中显示一个按钮这一功能,在已有的Test程序(设为启动项目)中实现。首先需要创建一个按钮类对象,按钮对应的MFC类是CButton类,其继承层次结构如图所示,得知 CButton类派生于CWnd类

在MFC提供的资源类中,有些类的对象的构造(包括对象构造与初始化)直接通过其构造函数就可以完成。也就是说,这些对象的构造函数包含了这个对象的初始化操作。但有些对象的产生除了调用构造函数外,还需要调用其他一些函数来进行初始化的工作,然后才能使用该对象。对于一个CButton对象,在定义之后就可以使用了。但是作为一个窗口类对象,即CWnd对象,如果在构造之后还需要产生这个窗口的话,则需要调用CreateEx函数来完成初始化工作。也就是说,如果要显示一个按钮,那么在定义这个 CButton类对象之后(即调用CButton类的构造函数之后)还需要调用CButton的Create函数创建这个按钮窗口,从而把按钮窗口与CButton对象关联起来

CButton的Create函数声明如下。

CButton::Create

virtual BOOL Create( 
   LPCTSTR lpszCaption, 
   DWORD dwStyle, 
   const RECT& rect, 
   CWnd* pParentWnd, 
   UINT nID  
);

各个参数的意义如下所述。
■ lpszCaption
指定按钮控件的文本
■ dwStyle
指定按钮控件的风格。按钮控件不仅具有按钮风格类型,还具有窗口风格类型。多种风格类型可以通过位或操作加以组合。
■ rect
指定按钮控件的大小和位置。该参数是RECT结构体类型,通过指定左上角和右下角两个点的坐标定义一个矩形。结构体也是一种特殊的类,所以可以用类CRect来构造一个RECT结构体。
■ pParentWnd
指定按钮控件的父窗口。这是一个 CWnd 类型的指针。MFC 中不再通过窗口句柄,而是通过一个与窗口相关的C++窗口类对象指针来传递窗口对象。
■ nID
指定按钮控件的标识

为了在框架窗口上产生一个按钮控件,显然应该是在框架窗口产生之后,再创建该按钮控件,否则没有地方放置它。窗口创建时都会产生WM_CREATE消息,CMainFrame类提供一个OnCreate函数,该函数就是用来响应这条窗口创建消息的。该函数的默认实现代码如下所示。

OnCreate函数(MainFrm.cpp)CMainFrame类:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("未能创建工具栏\n");
		return -1;      // 未能创建
	}

	if (!m_wndStatusBar.Create(this))
	{
		TRACE0("未能创建状态栏\n");
		return -1;      // 未能创建
	}
	m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));

	// TODO: 如果不需要可停靠工具栏,则删除这三行
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米酒馆

鼓励鼓励,鼓励很重要啦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值