MFC处理菜单栏和工具栏

MFC处理菜单和工具栏:

 

 

DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC支持动态创建和保存装载,

所以需要MFC动态创建和序列化的类都需要

 

BEGIN_MESSAGE_MAP()/END_MESSAGE_MAP()定义消息映射关系,

拥有消息队列的类都应该有,比如窗口类。

 

由于MFC是完全面相对象的,所以消息映射建立的特定消息与程序中函数的关系。并且Windows

消息的每个类都有一个消息映射。

 

 

所有派生于CCmdTarget的类都有DECLARE_MESSAGE_MAP()宏,一般放在最后定义。

 

class CSketcherApp : public CWinAppEx

{

public:

CSketcherApp();

 

 

// 重写

public:

virtual BOOL InitInstance();

virtual int ExitInstance();

 

// 实现

UINT  m_nAppLook;

BOOL  m_bHiColorIcons;

 

virtual void PreLoadState();

virtual void LoadCustomState();

virtual void SaveCustomState();

 

afx_msg void OnAppAbout();//消息处理程序;

DECLARE_MESSAGE_MAP()//这个宏表示这个类包含作为消息处理程序的函数成员

};

 

 

ID_APP_ABOUT 定义的是help|About菜单选项。

 

不应该把一个消息映射到类得多个处理程序上。

 

MFC消息分类:Windows消息(VM_开头,eg:重画客户区,鼠标左键、由派生于CWnd的类处理)、控制通知消息(是VM_COMMAND

消息。eg:从控件(如列表框)发送到该创建该控件的窗口)、

命令消息(所有命令消息都将发送到应用程序主框架窗口,然后再将消息按一定得顺序传递给程序中的类)。

 

COMMAD消息:在选定特定的菜单项时将发出这种消息。(如:设致当前颜色,设置元素类型)

UPDATE_COMMAND_UI:菜单应当更新或是复选或是未选。When you click a menu item 

in the Menu bar, an UPDATE_COMMAND_UI

message is sent for each item in that menu before the menu is displayed.

 This provides the opportunity to

do any necessary updating of the menu items’ properties before the user 

sees it.

 

类处理消息的顺序:

SDI程序:1、视图对象。2、文档对象。3、文档模板对象。4、主框架窗口对象。5、应用程序对象。

MDI程序:1、活动视图对象。2、与活动视图相关的文档对象。3、与活动相关的文档模板对象。4、活动视图的框架窗口对象。5、主框架窗口对象6、应用程序对象。

 

 

添加菜单到程序的步骤:1、定义要出现在主菜单栏和每个菜单中的菜单项。2、决定应用

程序中的那些类应当处理每个菜单项的消息。3、添加消息处理函数到菜单消息的类中。

4、添加函数到类中,以更新菜单的外观,显示当前有效的选择。5、添加菜单栏按钮以及每个菜单项的工具提示。

 

在弹出式主菜单中,热键必须是唯一。无消息相应的菜单无需ID;

 

元素类型和颜色为摸态:无论对元素和颜色进行什么设置,再被修改之前,他们应当一直有效。

有两种基本设置:按视图或者文档设置。

 

在c语言中,把直接使用的常数叫做幻数。在编程时,应尽量避免使用幻数,

因为当常数需要改变时,要修改所有使用它的代码,工作量巨大,还可能有遗漏。

因此通常把幻数定义为宏或枚举。建议使用枚举,因为它是编译阶段存在的符号,

编译器的提示会更清晰、更准确。

  #define ARRAY_SIZE 10

  enum{ARRY_SIZE = 10}

 

RGB()是在头文件Wingdi.h中定义的的标准宏,这个头文件是Window.h的一部分。

 

八进制(以O开头)如:O12;十六进制(以OX开头)如:OX12;长整型用L做后缀;

无符号型用U作后缀,无符号长整型以UL或LU均可。

 

 

inlclude"dsd.h"保证dsd.h文件被包含所在的源文件包含,#pragram once 保证了她下面

的定义只能被源文件包含一次。

 

 

CCmdUI  类是只用于处理更新程序的MFC类,不过他也适用按钮和菜单项。有五个成员函数:

ContinueRouting()、Enable()、SetCheck()、SetRadio()、SetText()

 

一个菜单中的所有菜单项的更新都在处理这个菜单之前被调用。

 

要把一个工具按钮和一个特定的菜单项关联前来,需要给这个按钮赋予一个和菜单项

相同的ID;

 

 

 

在MainFrame.cpp中由函数if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))

{

TRACE0("未能创建工具栏/n");

return -1;      // 未能创建

}    

其中的theApp.m_bHiColorIcons为真是则程序加载的ToolBar256的窗体框架(如:工具条)

而起在vs2010中默认为TRUR(在Sketcher.cpp文件中的CSketcherApp::CSketcherApp()函数定义中定义)

所以如果你编辑的工具条是在ToolBar中编辑的,那么他就不会被显示。这个搞得我郁闷很久啊。。。。。。

你可能感兴趣的:(Visual,studio,学习笔记)