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);//最后赋值给窗格
- MFC入门
- MFC入门
- MFC入门
- MFC入门
- MFC入门
- mfc入门
- MFC入门
- MFC入门
- MFC入门
- 入门MFC[转]
- MFC应用程序框架入门
- MFC入门(一)
- MFC入门(三)资源
- MFC入门(一)
- MFC应用程序框架入门
- MFC入门系列(三)
- 转:MFC入门小结
- MFC控件入门
- 计算机软件编程英语词汇表
- log4cpp
- c++ 输出文本
- Android的Handler总结
- 存储过程
- MFC入门
- 上班后的我
- vs调试
- 同步异步IO
- 一点体会(面向对象)
- msi【备忘】
- Android VNC Server on G1 (PC 远程控制 Android 手机)
- DelphiX for D6/D7 学习笔记
- #100310#NeHe学习笔记01