MFC入门

来源:互联网 发布:java数字转换字符串 编辑:程序博客网 时间:2024/05/22 10:37


程序如何进入的:
MFC中CWinApp类是不可或缺的一个类,程序从InitInstance进入,程序必需实例化(如sample *obj;
obj=new sample;)调用框架(CFrameWnd的派生类)的构造函数进行初始化,此时框架或是窗体被创建在内存中,通过调用obj->ShowWindow(SW_SHOWMAXIMIZED);显示窗体。
消息映射:
在框架中添加一个消息处理函数用宏DECLARE_MESSAGE_MAP申明BEGIN_MESSAGE_MAP和END_MESSAGE_MAP

在类外用
BEGIN_MESSAGE_MAP(sample,CFrameWnd)
//这个宏是一个带参数的宏,填写两个参数,一个子类,一个父类
ON_WM_LBUTTONDOWN() //左键按下的事件
END_MESSAGE_MAP() //结束宏
用ON_COMMAND这个宏来定义具体的消息和消息对应的函数

添加菜单:
MAKEINTRESOURCE这个宏来包装我们的菜单ID,其他的参数我们用默认的。
Create(NULL,"MFC Window",WS_OVERLAPPEDWINDOW,rectDefault,NULL,MAKEINTRESOURCE(IDR_MENU1),0,NULL);
  不要忘记在前面加上#include "resource.h",在运行程序就会发现菜单。全部程序如下(不包括资源文件)
添加工具条和状态条:
先在框架中实例化工具条类
CToolBar t;//实例化工具条类
CStatusBar s;//实例化状态条类

在VC中一个工具条只有一个条形的图片,它负责提供所有的按钮图片,这个条形的图片被切割成大小为15*16的一个一个的小图片,给对应的按钮。我们首先要创建一个工具条窗体(Create方法),然后加载一个的位图(使用LoadBitmap方法),还要创建几个按钮(使用SetButtons方法),图片和按钮的关联是自动的。
状态条:一个条形的窗体,里面有很多的窗格,就是格子,我们要创建一个窗体(Create方法),在窗体上创建很多窗格(SetIndicators方法).
我们在OnCreateClient这个方法里面写,不过要注意这个函数是框架的一部分,不要试图去调用它,她是在创建窗体时框架自动调用的。
BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
{
UINT tool[]={
ID_DISPLAY_UP,ID_DISPLAY_DOWN,ID_DISPLAY_LEFT,ID_DISPLAY_RIGHT};
UINT stat[]={0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS};
//工具条创建
t.Create(this,WS_VISIBLE|WS_CHILD|CBRS_TOP|CBRS_FLYBY);
//工具条加载图片
t.LoadBitmap(IDB_BITMAP1);//用VC的CBitmap类的LoadBitmap()函数
//设置按钮
t.SetButtons(tool,4);

//状态条创建
s.Create(this);
//状态条设置窗格
s.SetIndicators(stat,3);
return TRUE;

}

然后添加消息映射:

  ON_COMMAND(ID_DISPLAY_UP, up)
  ON_COMMAND(ID_DISPLAY_DOWN,down)
  ON_COMMAND(ID_DISPLAY_LEFT,left)
  ON_COMMAND(ID_DISPLAY_RIGHT,right)

  消息映射宏ON_COMMAND接两个参数,第一个是资源ID号,第二个是响应函数的名字。我们要在sample类里面加上这些函数
void up()
{
::MessageBox(0,"up","消息",MB_OK);
}
void down()
{
::MessageBox(0,"down","消息",MB_OK);
}
void left()
{
::MessageBox(0,"left","消息",MB_OK);
}
void right()
{
::MessageBox(0,"right","消息",MB_OK);
}

下面我们来实现它,首现我们要在状态栏添加一个网格,更改代码


  UINT stat[]={0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS};

  为
  UINT stat[]={0,0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS};

  再更改,
  s.SetIndicators(stat,3);

  为
  s.SetIndicators(stat,4);
使用MFC定义好的宏ON_WM_MOUSEMOVE(),直接放到消息映射里面就可以了
下面添加消息映射的处理函数void OnMouseMove(UINT nFlags, CPoint point)
指示哪些键被按下。这个参数可以是以下值的任意组合:
  ? MK_CONTROL Set if the CTRL key is down. //CTRL键
  ? MK_LBUTTON Set if the left mouse button is down.//鼠标左键
  ? MK_MBUTTON Set if the middle mouse button is down.//鼠标中键
  ? MK_RBUTTON Set if the right mouse button is down.//鼠标右键
  ? MK_SHIFT Set if the SHIFT key is down. //SHIFT键
str_x.Format("%d",point.x);//转换point.x到str_x
str_y.Format("%d",point.y); //转换point.y到str_y
s.SetPaneText(1,str,TRUE);//最后赋值给窗格

原创粉丝点击