新建项目->MFC模板->MFC应用程序->应用程序类型:单个文档;项目样式:MFC 标准->下一步...OK
此时点击运行,可直接弹出窗口。
调整 视图->类视图:
·CAboutDlg,帮助选卡->关于对话框
·CMainFrame,框架类,相框,PreCreateWindow可修改窗口外观,光标,图标;Create注册,调用OnCreate产生窗口;
·CMFCTestApp,InitInstance入口
·CMFCTestDoc,数据的存储和加载
·CMFCTestView,数据的显示和修改,相片
右键CMFTestView->属性->消息->WM_LBUTTONDOWN->OnLButtonDown;(自动创建,取消步骤相同,但取消只是逻辑删除,即注释掉了,并未真正删除)
//文件名:CMainFrame.h:
class CMainFrame : public CFrameWnd
// 生成的消息映射函数 protected: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); DECLARE_MESSAGE_MAP()//消息映射宏
//文件名:CMainFrame.cpp
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)//分界宏
ON_WM_CREATE()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return TRUE;
}
//文件名:CMFCTestApp.cpp
BOOL CMFCTestApp::InitInstance(){
... ...
// 唯一的一个窗口已初始化,因此显示它并对其进行更新 m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE;
}
//文件名:CMFCTestView.h
class CMFCTestView : public CView
// 生成的消息映射函数 protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnPaint();
//文件名:CMFCTestView.cpp
// CMFCTestView 绘图 void CMFCTestView::OnDraw(CDC* pDC) { CMFCTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 pDC->TextOutW(100, 100, TEXT("为了部落")); }
// CMFCTestView 消息处理程序
void CMFCTestView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CString str; str.Format(TEXT("x=%d,y=%d"), point.x, point.y); MessageBox(str); CView::OnLButtonDown(nFlags, point); }
//如果使用了OnDraw,就不要再使用OnPaint了;OnPaint会覆盖OnDraw;
void CMFCTestView::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CView::OnPaint() dc.TextOutW(100, 100, TEXT("为了联盟")); }
ps:
后缀Ex为扩展函数;
前缀Afx为全局函数,解决父类不相关问题。