Chinaunix首页 | 论坛 | 博客
  • 博客访问: 513145
  • 博文数量: 158
  • 博客积分: 4015
  • 博客等级: 上校
  • 技术积分: 1711
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-27 14:00
文章分类

全部博文(158)

文章存档

2010年(71)

2009年(87)

我的朋友

分类: C/C++

2010-02-03 17:19:57

学习WIN SDK编程有几个月了,今天终于进入了MFC的范围,思考了很久,决定拿《MFC WINDOWS程序设计》作为我的入门教程,选择它的原因主要是它够简单。

Hello.h

class CMyApp : public CWinApp {
    virtual BOOL InitInstance();
};

class CMainWindow : public CFrameWnd {
public:
    CMainWindow();
protected:
    afx_msg void OnPaint();
    DECLARE_MESSAGE_MAP()
};

Hello.cpp

#include <afxwin.h>
#include "Hello.h"

CMyApp myApp;

BOOL CMyApp::InitInstance() {
    m_pMainWnd = new CMainWindow;
    m_pMainWnd->ShowWindow(m_nCmdShow);
    m_pMainWnd->UpdateWindow();
    return TRUE;
}

BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
    ON_WM_PAINT()
    END_MESSAGE_MAP()

    CMainWindow::CMainWindow() {
        Create(NULL, _T("hello world"));
}

void CMainWindow::OnPaint() {
    CPaintDC dc(this);
    CRect rect;
    GetClientRect(&rect);
    dc.DrawText(_T("hello mfc!!!!"), -1, &rect,
        DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}

最初看这段代码是相当怪的:
首先,没有main(WinMain)函数, 作者直接从CWinApp继承,把main函数也当作一个类给封装起来了,这是比较怪的。
然后,没有看到怎样进行消息映射,没有while循环,没有TranslateMessage与DispatchMessage这样的函数,或者类似的操作,一切都被封装了,很怪,它到底是怎么运行的。
再次,把消息驱动与窗口合并到了一起,这个窗口接收什么消息,没有hwnd, hInstance这些数据成员,怎么调用的啊?哈哈,有点怪。
总之,封装得太狠了。

阅读(1448) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~