您的位置:首页 > 其它

MFC程序菜单、工具栏操作 [大三TJB_708]

2013-01-22 11:03 639 查看
高手莫笑,初学者,学生!
基于VS2010MFC的单文档项目。包括菜单的创建,工具栏的函数实现,及绘图函数简单介绍。如果是新建立的菜单,除了要选择一个类来作为代码实现文件外。
所创建的项目名称为13Jan21Pro。



1、创建新菜单

创建一个新菜单的前提是要基于单文档的工程项目。包括用菜单编辑器添加菜单栏及菜单项,利用向导生成菜单消息响应函数。按照步骤创建基于单文档工程项目13Jan21Pro。



1.1、用菜单编辑器添加菜单栏及菜单项

资源文件-->13JanPro.rc-->选中Menu右键-->插入Menu-->弹出13Jan21Pro-IDR_MENU1-Menu框,设置两个菜单如图1.,并右键设置其下的ID如表1。



图1
表格 1: 菜单名称及ID

名字
ID
直线
ID_LINE

ID_CIRCLE
惊喜
ID_SURPRISE
第一层菜单没有ID号设置,只有子菜单才有ID设置。所以“输出”和“帮助”没有ID设置选项。

1.2、利用向导生成菜单消息响应函数

选择项目下的类向导,选择类名为”CMy13Jan21Pro”,分别选择图1中的命令(ID_LINE,ID_CIRCLE,ID_SURPRISE)时双击COMMAND消息,在弹出的对话框类,你可以更改对应菜单项的函数处理名,更改好后点击确定。则菜单消息响应函数生成完毕。
下面是各个菜单对应函数的代码:
ID_LINE对应处理消息函数代码
void CMy13Jan21ProView::OnLine()
{
	//获取环境设备
	CClientDC dc(this);

	OnPain_flag	= 0;

	//直线起点
	dc.MoveTo(50, 100);

	//直线终点
	dc.LineTo(50, 200);
}

ID_CIRCLE菜单对应的消息处理函数代码
void CMy13Jan21ProView::OnCircle()
{
	CClientDC dc(this);

	OnPain_flag	= 0;
	dc.Ellipse(100, 100, 200, 300);
	dc.Rectangle(300, 100, 500, 200);
}


ID_SURPRISE菜单对应的消息处理函数代码
//开a启OnPaint函数
void CMy13Jan21ProView::OnSurprise()
{
	OnPain_flag	= 1;
	InvalidateRect(FALSE);
}

OnPaint函数代码,由ID_SURPRISE对应函数激发
<span style="color:#330000;">void CMy13Jan21ProView::OnPaint()
{
	CPaintDC dc(this);
	
	if(OnPain_flag){
		LOGFONT font;

		font.lfHeight		= 50;
		font.lfItalic		= 0;
		font.lfEscapement	= 0;
		font.lfCharSet		= GB2312_CHARSET;
		font.lfUnderline	= 1;
		font.lfStrikeOut	= 0;
	
		CFont nFont, *oFont;

		nFont.CreateFontIndirect(&font);
		oFont	= dc.SelectObject(&nFont);
	
		CString	Str;
		Str	= "天涯若比零,26教打开水!";

		dc.TextOut(0, 0, Str);
		dc.SelectObject(&font);
	}
}
</span>



2、添加新建菜单到主程序应用类中

待关于菜单的ID及对应消息处理函数编写完毕后还要将新建菜单添加到主程序应用类中,让新建菜单响应不同的类。在主程序应用类的BOOL CMy13Jan21ProApp::InitInstance()
函数内添加如下代码
在主函数中选中新建菜单框和对应类联合
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
		IDR_MENU1,
		RUNTIME_CLASS(CMy13Jan21ProDoc),
		RUNTIME_CLASS(CMainFrame),       // 主¡Â SDI 框¨°架¨¹窗ä¡ã口¨²
		RUNTIME_CLASS(CMy13Jan21ProView));
if (!pDocTemplate)
	return FALSE;
AddDocTemplate(pDocTemplate);


在如此代码后程序就能在新建菜单窗口中运行。

3、执行结果

图2是在新建菜单的窗口中呈现的执行结果,点击菜单”直线”时绘制一条直线,点击”圆”菜单时绘制一个椭圆,当点击”惊喜”时所绘制的直线和圆都会消失。但”惊喜”下的文字一经输出就不会在消失,这就是OnPaint的作用,容以后讨论。



图2


4、工具栏

工具栏的修改或新建跟菜单完全相同,在此不再赘述,需以下两点说明:
1工具栏的修改或仙剑要通过C++工程项目窗口”Resource View”中的Toolbar进行。
2加载新建工具栏的方法是通过CMainFrame::OnCreate成员函数实现的。

4.1、新建工具栏设置工具栏ID

a. 用与新建菜单相同的方法插入一个工具栏Toobar,默认其标识为IDR_TOOLBAR1。

b. 在IDR_TOOLBAR1中添加图形(画笔等绘制图形的工具在工具栏中),修改每一个图形的ID号(选中图标,右键属性),如直线按钮为ID_TLINE,圆的ID为ID_TCIRCLE,惊喜ID为ID_TSURPRISE。

c. 通过类向导指定IDR_TOOLBAR1所属类为CMyView。

d. 通过类向导建立各命令在CMyView中断额消息响应函数,方法与菜单消息响应函数的建立过程相同。然后在各消息响应函数内添加程序代码(即调用相应的菜单响应函数)。

4.2、加载工具栏

加载新工具栏,修改CMainFrame::OnCreate函数中的m_wndToolBar.LoadToolBar的参数,将原来的IDR_MAIRFRAME(或者其它)改为新建菜单标识IDR_TOOLBAR1。
在MainFrm.cpp中将m_wndToolBar.LoadToolBar参数直接换位IDR_TOOLBAR1。

此时界面会新添加工具栏,并且工具栏与所对应的菜单具一样的功能,见图3



图3


此次笔记记录完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: