《明明白白看MFC之程序框架(一)》

原创 2004年04月05日 23:14:00

 

最近一直在学习VC,因为是自学,有许多问题都是在经过一番辛苦的查找资料才得以解决的,现在,把这些学习VC入门刚刚弄懂得问题贴出来,希望可以得到更多的指教,如果能够帮助到跟我有过同样困惑的人,那就是万幸了!<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

VC中借助MFC可以方便的创建Windows应用程序,但是,要弄清楚MFC的来龙去脉还真是不容易,首先,需要知道Windows程序的基本框架,然后才有可能更深入的去了解MFC框架中的Windows程序。

 

一、SDK应用程序结构

 

使用经典的SDK编写Windows程序虽然稍显麻烦,但是其给我带来的感觉是具有如行云流水般的运行脉络,简洁明了得运行过程,让我理解起来非常容易,下面就看看一个经典的SDK编写的Windows程序的源代码:

 

 

LRESULT CALLBACK  WndProc(HWND, UINT, WPARAM, LPARAM);

 

int APIENTRY WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPSTR     lpCmdLine,

                     int       nCmdShow)

{

 // TODO: Place code here.

MSG msg;

………………………………

MyRegisterClass(hInstance);

 

if (!InitInstance (hInstance, nCmdShow))

{

    return FALSE;

}

 

// Main message loop:

while (GetMessage(&msg, NULL, 0, 0))

{

    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

    {

        TranslateMessage(&msg);

        DispatchMessage(&msg);

    }

}

 

return msg.wParam;

}

 

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

   ……………………

 

   return TRUE;

}

 

//窗口函数WndProc(),回调函数

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

int wmId, wmEvent;

……………………

switch (message)

{

    case WM_COMMAND:

        ………………

        break;

    case WM_PAINT:

       hdc = BeginPaint(hWnd, &ps);

       // TODO: Add any drawing code here...

       RECT rt;

       GetClientRect(hWnd, &rt);

       DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);

       EndPaint(hWnd, &ps);

       break;

    case WM_DESTROY:

        ……

    default:

        return DefWindowProc(hWnd, message, wParam, lParam);

   }

   return 0;

}

 

                    SDK"Hello World"源程序

 

    首先让我们看一下这个程序的结构,WinMain()是函数的入口点,该函数的主要任务是完成一些初始化的工作和维护了一个消息循环。他们的工作流程如下:入口(WinMain()---à    MyRegisterClass()---->InitInstance ()-àwhile消息循环。函数由入口开始执行,之后调用    MyRegisterClass()注册窗口类,之后InitInstance ()生成并显示窗口,这样之后,就完成了一个窗口的初始化工作了(当然,在 MyRegisterClass()InitInstance ()中都需要调用相应的API函数来具体的实现,不过我这里重点分析的是他的结构,所以不考虑他的具体实现细节),然后就是维护消息循环,可以看出,这个程序运行过程简单名了,一步一步执行下来,完全符合我们的思维。

   但是,有一点是需要注意的,那就是那个消息循环的结构,在例子程序中,我让程序在窗口中输出一句"Hello World"。在主程序中已经把应用程序的框架搭建好了,而所有的控制等信息都是通过消息循环发送的窗口处理过程中进行处理的,输出信息是在接受到WM_PAINT信息时输出的。

    直接使用SDK编写的Windows应用程序是如此直截了当,然而在MFC中所有的这些似乎都不复存在了,取而代之的却是一些莫名其妙得宏,那么这些宏有什么神奇,他们是怎么实现一个Windows程序的呢?(待续)

明明白白看MFC之程序框架(一)

导读:   对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便。其实对于现在的编程工具来说,使用哪   一种工具都不是问题的关键...
  • yingfox
  • yingfox
  • 2007年12月06日 20:05
  • 401

明明白白看MFC之程序框架(一)

对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便。其实对于现在的编程工具来说,使用哪一种工具都不是问题的关键,重要的是你能够使用...
  • sxslyy
  • sxslyy
  • 2007年08月17日 09:46
  • 481

《明明白白看MFC之程序框架(三)》

三、MFC程序结构分析 在前面分别列出了SDK和MFC应用程序的框架,并且稍微理了一下它们之间的对应关系。但是对于MFC程序来说,要想真正搞懂它的框架的话,还是不够的。  首先就是看一下应用向导生成的...
  • eliner
  • eliner
  • 2004年04月05日 23:18
  • 2143

明明白白看MFC之程序框架

对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便。其实对于现在的编程工具来说,使用哪一种工具都不是问题的关键,重要的是你能够使用...
  • fxpopboy
  • fxpopboy
  • 2007年01月11日 21:21
  • 895

《明明白白看MFC之程序框架(二)》

 二、         MFC应用程序结构 借助向导,可以快速的生成一个SDI的Windows应用程序。在使用向导生成应用程序后,会发现有好几个文件, 其主要代码如下: CHelloWorldApp ...
  • eliner
  • eliner
  • 2004年04月05日 23:18
  • 2012

明明白白看MFC之程序框架(二)

二、 MFC应用程序结构 在《明明白白看MFC之程序框架(一)》中我分析了一个经典的SDK应用程序的结构,现在可是要进入主题“MFC应用程序结构”了。MFC应用程序有好多种,为了能够更清楚地与前面的文...
  • sxslyy
  • sxslyy
  • 2007年08月17日 09:40
  • 504

明明白白看MFC之程序框架(三)

三、MFC程序结构大剖析 在前面我分别给出了SDK和MFC应用程序的框架,并且稍微理了一下它们之间的对应关系。但是对于MFC程序来说,要想真正搞懂它的框架的话,还是不够的。现在我要做的事就是继续去分析...
  • sxslyy
  • sxslyy
  • 2007年08月17日 09:39
  • 608

Windows-MFC框架程序剖析

MFC框架程序剖析 1.MFC Microsoft Foundation Class,微软基础类库,是微软开发的C++集合,方便我们使用它来编写Windows程序。 下面是4个基本的类,我们的V...
  • qq_22075977
  • qq_22075977
  • 2016年04月22日 16:56
  • 3091

深入理解MFC中程序框架

新建一个Example单文档工程,应用向导可以自动地生成MFC应用的各个C++类。 1. 应用类及全局对象(CExampleApp) theApp 是唯一一个在程序形成的时候就存在的全局变量,C...
  • liulianglin
  • liulianglin
  • 2014年01月09日 16:49
  • 1372

MFC之程序框架

 首先就是看一下应用向导生成的MFC应用程序都有哪些主要的文件,包含哪些类以及相关类的对应功能和他们之间的关系(再次说明,因为我在这里关心的是程序的框架结构,所以对于一些与话题关系不很大的东西我将会略...
  • sunnyjones
  • sunnyjones
  • 2007年04月10日 08:31
  • 469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《明明白白看MFC之程序框架(一)》
举报原因:
原因补充:

(最多只允许输入30个字)