开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1374|回复: 10
收起左侧

[图文教程] MFC入门系列(三)

[复制链接]

结帖率:100% (11/11)
发表于 2013-8-1 11:40:54 | 显示全部楼层 |阅读模式   河北省衡水市
 上两节我们讲了一个简单的MFC的程序,和消息映射宏的用法,我们这一节将讲述资源文件,在将资源文件之前,我们看一下VC++的文件简介,那我们看下面这一张图。

 这张图清楚的描述了VC++的文件系统,他们是分为两条线的一个是源文件,一个是资源文件。

  先讲第一条线—源文件,.c或者.cpp文件,在加入了头文件.H文件后,就进入编译器工具。

  在讲第二条线—资源文件,有最上面的三个工具,对话框工具编辑对话框文件.dlg,图片编辑器编辑图片(.bmp)、光标(.cur)、图标(.ico)文件,字体编辑器编辑字体文件(.FON)(但是字体我没有看到哪里可以用,请高人指点)。所有的资源文件合成一个文件.RC文件,即资源文件,我们可以想到,这资源文件和我们的源文件怎么关联呢?那么唯一相关联的是.H文件,这个头文件就是我们等一下要用的resource.h这个文件。

  .c或者.cpp文件和头文件编译成.obj文件,而.rc文件和头文件编译成.res文件,.obj和库文件和.res文件连结成可执行文件。

  大家可能都看烦了,下面来上机创建一个资源文件,即菜单,为我们上两节的程序加一个菜单。先打开我们的上两节的程序的工程,然后,新建—〉在打开的对话框里,我们自动会在文件选项卡里,我们选择Resource Script选项,在文件文本框中填写一个文件名,自己起一个名字。那么,我们就给我们的工程加了一个资源文件。在弹出的窗体,点击右键,在谈出的菜单中点击Insert菜单---〉Menu--新建.,在弹出得菜单编辑器,我们双击主菜单,弹出的属性框中,填写菜单标题 如:我的菜单.回车后,我们就建立了一个菜单资源文件。我们可以看到,这个资源编辑器是WYSIWYG(What you see is what you get所见及所得)界面,我只简单介绍一下:

  资源编辑器创建的资源会自动的生成resource.h这个头文件,我们刚才也讲了,这个头文件是资源文件和源代码文件的一个桥梁,所以我们在源代码例一定要#include “resource.h”,我们在创建子菜单的时候会发现,有一个资源ID号要你填写(自己起一个名字,不要重复),那么这个资源号就是我们在源代码里要引用的。

  我们已经添加了菜单,我们运行程序,发现菜单并没有出现,因为我们的菜单并没有和我们的某一个窗体相关联。那么如何关联?

  我们回忆我们在写SDK程序是我们是如何加菜单的。我们使用CreateWindow这个API函数来创建窗体,同时也关联菜单(当然,也可以在注册类里关联),我们知道MFC就是对API的封装后,CreateWindow当然也被封装了,他被封装成了很多类的Create方法,其中就有CFrameWnd。我们在Sample 类里继承了CFrameWnd,我们右键点击 Sample 构造函数里的Create方法,在弹出的菜单里点击Goto Define of Create,在弹出的菜单点确定。我们来到了Create方法的定义

BOOL Create(LPCTSTR lpszClassName,//注册类,MFC将注册类封装,我们填写NULL
    LPCTSTR lpszWindowName,//窗体名,窗体标题
    DWORD dwStyle = WS_OVERLAPPEDWINDOW,//窗体风格
    const RECT& rect = rectDefault,//窗体的矩形区域
    CWnd* pParentWnd = NULL,        // 父窗体指针
    LPCTSTR lpszMenuName = NULL,  //窗体的菜单
    DWORD dwExStyle = 0,//窗体扩展风格
    CCreateContext* pContext = NULL);//框架窗体的视图和文档信息,一般填NULL

  那我们看到前面两个参数,没有等号,说明他们是必选的参数,后面是可选的,在可选的参数里面有一个窗体的菜单,他的类型是LPCTSTR,我们看这个类型有一个方法,分开看,首先L是long ,P是指针,CT是Const常量 ,STR是字符串,也就是一个指向常量字符串的长指针。我们打开MSDN看这个方法的参数如何填写,在MSDN的索引中添Create回车,在弹出的主题中选择CFrameWnd::Create,我们找到菜单这个参数的解释

lpszMenuName
Identifies the name of the menu resource to be used with the window. Use MAKEINTRESOURCE if the menu has an integer ID instead of a string. This parameter can be NULL.

  我们看到我们要使用MAKEINTRESOURCE这个宏来包装我们的菜单ID,其他的参数我们用默认的

Create(NULL,"MFC Window",WS_OVERLAPPEDWINDOW,rectDefault,NULL,MAKEINTRESOURCE(IDR_MENU1),0,NULL);

  不要忘记在前面加上#include "resource.h",在运行程序就会发现菜单。全部程序如下(不包括资源文件)

#include <afxwin.h>
#include "resource.h"
class sample:public CFrameWnd
{
public:
  sample()
  {
  Create(NULL,"MFC Window",WS_OVERLAPPEDWINDOW,rectDefault,NULL,MAKEINTRESOURCE(IDR_MENU1),0,NULL);
  MessageBox("My MFC Window","CFrame constructor",MB_OK);
  }
  void OnLButtonDown(UINT,CPoint)//添加的消息处理函数
  {
    ::MessageBox(NULL,"ddd","dd",MB_OK);
  }

  DECLARE_MESSAGE_MAP()//消息映射的申明

};

BEGIN_MESSAGE_MAP(sample,CFrameWnd)
//这个宏填写两个参数,一个子类,一个父类
  ON_WM_LBUTTONDOWN()//左键按下的事件
END_MESSAGE_MAP()//结束宏
class App:public CWinApp
{
public:
BOOL InitInstance();
BOOL ExitInstance();

};

BOOL App::InitInstance()
{
MessageBox(0,"My MFC Window","InitInstance",MB_OK|MB_ICONASTERISK);
sample *obj;
obj=new sample;
m_pMainWnd=obj;
obj->ShowWindow(SW_SHOWMAXIMIZED);
return TRUE;
}

BOOL App::ExitInstance()
{
MessageBox(0,"My Window","ExitInstance",MB_OK|MB_ICONHAND);
return TRUE;
}

App a;

  我们这一节用菜单为例子,讲解了资源文件,以及填写参数的方法,下一节再见。


结帖率:80% (4/5)
发表于 2013-8-1 11:56:04 | 显示全部楼层   湖南省长沙市
老白兔
回复 支持 反对

使用道具 举报

结帖率:42% (5/12)
发表于 2013-8-1 11:55:32 | 显示全部楼层   加拿大
小岩我看你不是大牛你是大兔吧
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)
发表于 2013-8-1 11:53:39 | 显示全部楼层   湖南省长沙市
小岩 - -
不要以为换了马甲,换了头像
我们就不认识你了

点评

叫白兔 听见没有 泥煤的   河北省衡水市  发表于 2013-8-1 11:55
回复 支持 反对

使用道具 举报

结帖率:42% (5/12)
发表于 2013-8-1 11:51:18 | 显示全部楼层   加拿大
小岩又伪装大牛了啊

点评

什么叫做伪装 其实我表面上看不是大牛 但其实我真的不是大牛 但是别人看我肯定是大牛   河北省衡水市  发表于 2013-8-1 11:52
回复 支持 反对

使用道具 举报

结帖率:42% (5/12)
发表于 2013-8-1 11:47:18 | 显示全部楼层   加拿大
小岩你又来装大牛啊

点评

叫白兔 听见没有 什么叫做装大牛 这叫伪装 不要说错 好不好   河北省衡水市  发表于 2013-8-1 11:50
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2013-8-1 11:44:41 | 显示全部楼层   河南省商丘市
小岩...你不能屎啊...

点评

-_- 叫白兔 泥煤的   河北省衡水市  发表于 2013-8-1 11:45
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表