MFC高级页面框

默认MFC创建的SDI窗口是包含三个停靠子窗口的,如果想取出这三个子窗口,可以在新建MFC程序向导的Advanced Features页面取出Explorer docking pane, Output docking pane, Propeties docking pane三个选项。

日志文件夹
日志文件夹

CSingleDocTemple

从MFC的CSingleDocTemple类创建了一个SDI文档模板。 SDI文档模板是SDI文档/视图应用程序的最主要成分。他表示了用来管理应用程序数据的文档类、包含数据视图的框架窗口类、以及用来绘制可视数据表示的视图类。CSingleDocTemple在 CWinApp->InitInstance() 中初始化。文档模板不仅管理程序中的文档对象,还管理与文档相关的窗口和视图。

CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CSDItestDoc),
		RUNTIME_CLASS(CMainFrame),      
		RUNTIME_CLASS(CSDItestView));

if (!pDocTemplate)
		return FALSE;
AddDocTemplate(pDocTemplate);

日志文件夹

CFormView

创建SDI时,可以使用CFormView创建窗口单文档视图程序。
日志文件夹

视图初始化函数

可以在函数OnInitialUpdate中初始化视图

void CanliView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

	CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);//设置编辑区默认显示
	m_buttonPre.EnableWindow(FALSE);
	m_buttonNext.EnableWindow(FALSE);

}

视图类中获取文档类

一个视图只能对应一个文档,但是一个文档可能会有多个视图

CanliDoc *pDoc = GetDocument();

视图类中更新控件数据

UpdateData(TRUE); //从控件取值

UpdateData(FALSE); //设置控件的值

文档类释放内容函数 DeleteContents

该函数会在每次新建文档时,自动调用。

设置单选框选中状态

可以通过CheckRadioButton函数设置单选框的选中状态,该函数给一组单选按钮中的一个按钮加上选中标志,并且清除组中其他按钮的选中标志。需要指定组中第一个单选按钮的标识符和组中最后一个单选按组的标识符。并指出要选中的那个单选按钮的标识符。

CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);

OnLButtonDown, OnLButtonUp, OnMouseMove

通过鼠标左键,移动鼠标可以在视图上绘制线段。

int m_Draw;
HCURSOR m_HCursor;
CPoint m_pOld;
CPoint m_pOrigin;

void CMFCApplication2View::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pOld = point;
	m_pOrigin = point;
	SetCapture();
	m_Draw = 1;
	RECT rect;
	GetClientRect(&rect);
	ClientToScreen(&rect);
	ClipCursor(&rect);
	//ClipCursor(&rect);
}


void CMFCApplication2View::OnLButtonUp(UINT nFlags, CPoint point)
{
	if (m_Draw) {
		m_Draw = 0;
		ReleaseCapture();
		ClipCursor(NULL);
	}
}


void CMFCApplication2View::OnMouseMove(UINT nFlags, CPoint point)
{
	SetCursor(m_HCursor);
	if (m_Draw) {
		CClientDC dc(this);
		dc.SetROP2(R2_NOT);
		dc.MoveTo(m_pOrigin);
		dc.LineTo(m_pOld);
		dc.MoveTo(m_pOrigin);
		dc.LineTo(point);
		m_pOld = point;
	}
}

String Table

  • IDR_MAINFRAME, 程序名称,会显示在标题栏