MyMFC(7-9)对话框 CMyMFC2DialogView

// MyMFC2-DialogView.cpp : CMyMFC2DialogView 类的实现
//

#include "stdafx.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "MyMFC2-Dialog.h"
#endif

#include "MyMFC2-DialogDoc.h"
#include "MyMFC2-DialogView.h"
#include "TestDlg.h" //包含所创建的类
#include "PropSheet.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMyMFC2DialogView

IMPLEMENT_DYNCREATE(CMyMFC2DialogView, CView)

BEGIN_MESSAGE_MAP(CMyMFC2DialogView, CView)
	// 标准打印命令
	ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
	ON_COMMAND(AFX_TIMER_ID_VISIBILITY_TIMER, &CMyMFC2DialogView::OnDialog)
	ON_COMMAND(IDM_PROPERTYSHEET, &CMyMFC2DialogView::OnPropertysheet)
	ON_WM_CREATE()
	ON_COMMAND(IDM_TEST, &CMyMFC2DialogView::OnTest)
	ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()

// CMyMFC2DialogView 构造/析构

CMyMFC2DialogView::CMyMFC2DialogView()
: m_iOccupation(-1)
, m_strWorkAddr(_T(""))
, m_strSalary(_T(""))
{
	// TODO:  在此处添加构造代码
	memset(m_bLike, 0, sizeof(m_bLike));  //####对于数组的初始化只能这样#######,意味着把m_bLike指定的内存中前sizeof(m_bLike)个字节设置为0


}

CMyMFC2DialogView::~CMyMFC2DialogView()
{
}

BOOL CMyMFC2DialogView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO:  在此处通过修改
	//  CREATESTRUCT cs 来修改窗口类或样式
/**********************************************************************************************************************/
	//由于在框架类中不能改变窗口背景和鼠标类型,在视类中是可以的
//方法一
	//cs.lpszClass = _T("sunxin.org"); //跟框架类有关,sunxin.org是在框架类中自己所设计的类,这里赋值一下就可以
//方法二(好)
	cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL, IDC_HELP), (HBRUSH)GetStockObject(GRAY_BRUSH), 0);  //返回值为注册之后的类名
	//1.窗口类的类型
	//2,3是光标和背景,
	//4.窗口的图标设置,因为在视类中设置没有意义,所以这里设为0.







	return CView::PreCreateWindow(cs);
}

// CMyMFC2DialogView 绘制

void CMyMFC2DialogView::OnDraw(CDC* pDC)
{
	CMyMFC2DialogDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO:  在此处为本机数据添加绘制代码

/*************************************************************************************************************************/
	//把在属性页中所做的选择输出
	CFont font;  
	font.CreatePointFont(200, _T("华文行楷"));  //设置字体

	CFont *pOldFont;
	pOldFont = pDC->SelectObject(&font);

	CString strTemp;
	strTemp = "你的职业:";

	switch (m_iOccupation)
	{
	case 0:
		strTemp += "C++程序员";
		break;
	case 1:
		strTemp += "Java工程师";
		break;
	case 2:
		strTemp += "PHP工程师";
		break;
	default:
		break;
	}
	pDC->TextOut(0, 0, strTemp);

	strTemp = "你的工作地点:";
	strTemp += m_strWorkAddr;

	TEXTMETRIC tm;
	pDC->GetTextMetrics(&tm); //得到字体的高度,要从下一行输出

	pDC->TextOut(0, tm.tmHeight, strTemp);

	strTemp = "你的兴趣爱好:";
	if (m_bLike[0])
	{
		strTemp += "足球 ";
	}
	if (m_bLike[1])
	{
		strTemp += "篮球 ";
	}
	if (m_bLike[2])
	{
		strTemp += "游泳 ";
	}
	if (m_bLike[3])
	{
		strTemp += "羽毛球 ";
	}
	pDC->TextOut(0, tm.tmHeight * 2, strTemp);

	strTemp = "你的薪资水平:";
	strTemp += m_strSalary;
	pDC->TextOut(0, tm.tmHeight * 3, strTemp);

	pDC->SelectObject(pOldFont);  //恢复之前字体
}


// CMyMFC2DialogView 打印

BOOL CMyMFC2DialogView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// 默认准备
	return DoPreparePrinting(pInfo);
}

void CMyMFC2DialogView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO:  添加额外的打印前进行的初始化过程
}

void CMyMFC2DialogView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO:  添加打印后进行的清理过程
}


// CMyMFC2DialogView 诊断

#ifdef _DEBUG
void CMyMFC2DialogView::AssertValid() const
{
	CView::AssertValid();
}

void CMyMFC2DialogView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CMyMFC2DialogDoc* CMyMFC2DialogView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyMFC2DialogDoc)));
	return (CMyMFC2DialogDoc*)m_pDocument;
}
#endif //_DEBUG


// CMyMFC2DialogView 消息处理程序


void CMyMFC2DialogView::OnDialog()
{
	// TODO:  在此添加命令处理程序代码
/*************************************************************************************************************************/
	//创建模态对话框
	CTestDlg dlg;
	dlg.DoModal();  //产生模态对话框



/*************************************************************************************************************************/
/*  //创建非模态对话框
	//由于DoModal函数本身就有显示模态对话框的作用;但是对于创建非模态对话框Create函数必须要用ShowWindow函数来显示出来
	//并且,因为模态对话框在程序执行到DoModal函数时,程序就会暂停,所以可以使用局部变量。但是非模态对话框,程序不会暂停,
	//所以:必须使用成员变量或者定义指针来申请堆内存。下面是采用后者
	//CTestDlg *pDlg = new CTestDlg;
	//pDlg->Create(IDD_DIALOG1, this);  //第一个参数是对话框资源的ID号,第二个参数是对话框的父窗口,如果设为NULL,对话框的父窗口就是主应用程序窗口
	//pDlg->ShowWindow(SW_SHOW);
	//怎么释放该new呢?方法一:可以把该指针变量pDlg定义为视类的成员变量,再在视类的析构函数中调用delete
	//方法二:在CTestDlg类中重载PostNcDestroy虚函数来调用delete
	//太麻烦了,直接采用定义一个成员变量

	Dlg.Create(IDD_DIALOG1, this);  //第一个参数是对话框资源的ID号,第二个参数是对话框的父窗口,如果设为NULL,对话框的父窗口就是主应用程序窗口
	Dlg.ShowWindow(SW_SHOW);
	//当单击OK或Cancel按钮时,对话框都会消失。对于模态对话框来说,此时对话框窗口对象被销毁。但是对于非模态对话框来说,只是隐藏起来
	//所以,对于非模态对话框必须重写OnOK和OnCancel这两个虚函数,在函数中调用DestroyWindow函数来销毁对话框
	*/



}


void CMyMFC2DialogView::OnPropertysheet()
{
	// TODO:  在此添加命令处理程序代码

/***************************************************************************************************************/
/*	//创建属性表单
	//在上面先要加上#include "PropSheet.h"
	CPropSheet propSheet(_T("属性表单"));  //调用CProSheet类的构造函数,这个构造函数的声明和定义是从旧的版本上面拷贝的
	propSheet.SetWizardMode();  //加上这句话整个创建属性表单的过程,就变成了创建向导。
	propSheet.DoModal();  //显示一个模态的属性表单
	*/
//若要修改属性页上面自动产生的按钮,“上一步”,“下一步”,添加“完成”按钮,就应该在相应的属性页类中,重写OnSetActive函数



/*******************************************************************************************************************************/
	//把属性页中的选项输出,在View类中定义的成员变量用来保存这些要输出的内容,####注意定义数组类型的成员变量时,在构造函数中的初始化####
	CPropSheet propSheet(_T("属性表单"));  //调用CProSheet类的构造函数,这个构造函数的声明和定义是从旧的版本上面拷贝的
	propSheet.SetWizardMode();
	//判断用户选择是“完成”按钮,还是“取消”按钮
	if (ID_WIZFINISH == propSheet.DoModal())  //一般情况下,CPropertySheet类的DoModal函数的返回值是IDOK或IDCANCEL。但是如果属性表单已经被创建为向导了
											  //那么,该函数的返回值将是ID_WIZFINISH或IDCANCEL
	{
		m_iOccupation = propSheet.m_prop1.m_occupation;
		m_strWorkAddr = propSheet.m_prop1.m_workAddr;
		m_bLike[0] = propSheet.m_prop2.m_football;
		m_bLike[1] = propSheet.m_prop2.m_basketball;
		m_bLike[2] = propSheet.m_prop2.m_swim;
		m_bLike[3] = propSheet.m_prop2.m_bedmintain;
		m_strSalary = propSheet.m_prop3.m_strSalary;
		Invalidate();  //让视类窗口无效,从而引起重绘操作
	}


}


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

	// TODO:  在此添加您专用的创建代码
/****************************************************************************************************************************/
/*	//在窗口创建之后,修改窗口的背景、鼠标。与在框架类中的OnCreate函数中调用SetWindowLong函数来修改窗口图标和去掉最大化按钮的类似的
	SetClassLong(m_hWnd, GCL_HBRBACKGROUND, (LONG)GetStockObject(NULL_BRUSH));
	SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_HELP));
	//参数1.指定要设置新属性的窗口句柄
	//2.指定要设置的属性的索引。
	    //GCL_HBRBACKGROUND 设置背景画刷(在视类中设置)
		//GCL_HCURSOR	    设置光标(在视类中设置)
		//GCL_HICON		    设置窗口图标(在框架类中设置)
		//GCL_STYLE		    数值窗口样式(都可以设置)
	//3.指定要设置的新的属性值
	*/

	return 0;
}


void CMyMFC2DialogView::OnTest()
{
	// TODO:  在此添加命令处理程序代码
	MessageBox(_T("test 添加工具栏中的按钮"));
}


void CMyMFC2DialogView::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值

/*******************************************************************************************************************************/
	//在状态栏上显示鼠标当前位置
	//要先包含框架类的头文件#include "MainFrm.h"
	CString str;
	str.Format(_T("x=%d,y=%d"),point.x, point.y);
//方法一
	//((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str);  //由于在框架类的头文件中系统自动生成的m_wndStatusBar成员变量设为protected类型,
																	  //这里要改为public
//方法二
	//((CMainFrame*)GetParent())->SetMessageText(str);  //SetMessageText函数值能在状态栏的第一个窗格上放置文本
//方法三
	//((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str); //这种方法不需要像方法一中将m_wndStatusBar的权限改为public
//方法四
	GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(str);





	CView::OnMouseMove(nFlags, point);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值