MFC单文档中创建控件

MFC单文档中创建控件的步奏:

	1.在xxView头文件中声明要添加的控件类型,如按钮 CButton m_button;
	2.xxView.cpp中通过宏的形式定义控件的ID,如#define IDB_BTN 130 
	3.在OnCreate函数中通过Create、ShowWindow函数来在界面中创建控件

例:

1.CTestView.h中添加控件声明:

public:
   CButton m_button;
   CStatic m_static;

2.CTestView.cpp中添加宏定义:

#define IDB_BTN 130
#define IDB_STATIC_TIP 131

3.添加OnCreate函数并重写:

 int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码

	//创建Button
	CRect rect_button(40, 10, 200, 60); //描述控件位置以及大小的结构 左、顶、右、底
	m_button.Create(_T("Show"), WS_CHILD | WS_VISIBLE | WS_BORDER, rect_button, this, IDB_BTN);
	m_button.ShowWindow(SW_SHOWNORMAL);

	//创建Static
	CRect rect_static(250, 10, 550, 58);
	m_static.Create(_T("F8打开窗体,Shit获取CTestDoc数据"), WS_CHILD | WS_VISIBLE | WS_BORDER, rect_static, this, IDB_STATIC_TIP);
	m_static.ShowWindow(SW_SHOWNORMAL);
 
	return 0;
} 

至此控件的添加已经完成,运行效果:
在这里插入图片描述

给按钮添加点击事件:

1.在CTestView.cpp中的
BEGIN_MESSAGE_MAP(CTestView, CView)
和END_MESSAGE_MAP()之间添加处理函数

	BEGIN_MESSAGE_MAP(CTestView, CView)
    xxx//其他默认代码
    xxx//其他默认代码
	ON_BN_CLICKED(IDB_BTN, OnClickButton)  
	
END_MESSAGE_MAP()

2.实现该处理函数OnClickButton 即可

void CTestView::OnClickButton()
{
	MyDialog dlg;
	dlg.DoModal(); 
}

在单文档view视图中画图

这里通过键盘按钮的方式实现简单画图:

添加键盘按下的函数OnKeyDown,并实现:


void CTestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{ 
	if (nChar == VK_F8)
	{ 
		CDC*pDC = GetDC();
		if (pDC == nullptr) return;
			 
		CFont myfont, *oldFont;
		LOGFONT font1;
		memset(&font1, 0, sizeof(LOGFONT));  

		font1.lfWidth = 25;
		font1.lfHeight = 40;
		font1.lfUnderline = false;//字体下划线
		StrCpy(font1.lfFaceName, _T("黑体"));//设置字体
		myfont.CreateFontIndirectW(&font1);  
		oldFont = pDC->SelectObject(&myfont);//选择新字体
		pDC->SetTextColor(RGB(0, 255, 300)); //设置字体颜色
		pDC->SetBkMode(TRANSPARENT); //设置输出文字时的背景模式
		pDC->TextOutW(200, 600, _T("用户按下了F8键")); 
		pDC->SelectObject(oldFont);//选择回老字体
		myfont.DeleteObject();//删除新字体
		 
		m_static.SetWindowTextW(_T("F8"));
		MyDialog dlg;
		dlg.DoModal();
		m_static.SetWindowTextW(_T("F8打开窗体,Shit获取CTestDoc数据"));
		Invalidate(TRUE);
	}
	else if (nChar == VK_SHIFT)
	{ 
		CTestDoc* pTestDoc = (CTestDoc*)GetDocument(); //单文档数据保存在DOC类中,通过该句来得到DOC类的指针以获取里面的数据

		m_static.SetWindowTextW(_T("Shit"));
		AfxMessageBox(pTestDoc->strTip);
		m_static.SetWindowTextW(_T("F8打开窗体,Shit获取CTestDoc数据")); 
	}

	CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

运行,按下F8,结果:
在这里插入图片描述
按下Shit,结果:
在这里插入图片描述
注意:
其中有相关的 #include 包含语句记得添加,否则会报错

END

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

随心漂流

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值