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 包含语句记得添加,否则会报错