怎么说呢,如果说是MFC倒不如说是MFC Windows应用程序(他们到底是什么关系,网上是这样认为的:
Windows程序设计一般是指用c语言编写windows应用程序,或叫做win32编程,MFC程序设计是利用C++,以MFC为基础编写windows应用程序;VC是一个开发工具,在这个开发工具里,可以进行win32编程和MFC程序设计)
首先我们要知道windows应用程序是由Windows系统和程序主函数及与其相关的事件消息处理函数组成的,我们需要编写的就是主函数和消息处理函数。主函数的作用就是用来创建窗口,接受用户事件并且将事件消息发送给系统(注意这里不同于Java的事件监听器);事件处理函数就是用来处理各种的反应,并且把处理后的结果返回给主函数。这两者
(主函数和事件处理函数)之间的通信就是通过Windows系统来实现的。我们还有知道有一个基本概念就是:句柄,
这个句柄是什么呢?很简单的说就是一个我可以用来调用微软封装好之后的所有函数。下面是一个简单的Windows程序,当鼠标左键单击程序窗口的用户区时,计算机的扬声器会发出“叮”的声音。
#include "stdafx.h"
#include "Windows.h"
#include<windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE PreFetchCacheLine,LPSTR lpCmdLine,int nCmdShow)
{
HWND hwnd; //定义窗口句柄
MSG msg; //定义一个用来存储消息的变量
char lpszClassName[]="窗口";
WNDCLASS wc;
wc.lpfnWndProc=WndProc;
wc.style=0;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName=NULL; //窗口没有菜单
wc.lpszClassName=lpszClassName;
RegisterClass(&wc); //注册窗口类型
//创建窗口
hwnd=CreateWindow(lpszClassName, //窗口类的名称
"Windows", //窗口实例的标题
WS_OVERLAPPEDWINDOW, //窗口的风格
120, //窗口左上角位置坐标值x
50, //窗口左上角位置坐标值y
800,//宽度
600,//窗口的高度
NULL,//父菜单的句柄
NULL,//主菜单的句柄
hInstance,//应用程序实例句柄
NULL);//该值通常为NULL
ShowWindow(hwnd,nCmdShow); //显示窗口
UpdateWindow(hwnd);
while (GetMessage(&msg,NULL,0,0)) //消息循环
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch (message)
{ //鼠标左键按下消息
case WM_LBUTTONDOWN:
{
MessageBeep(0); //可以发出声音的API函数
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}