// 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);
}
MyMFC(7-9)对话框 CMyMFC2DialogView
最新推荐文章于 2020-09-26 21:02:14 发布