(转载)MFC入门(五) 作者 zhoujiamurong
2005-09-13 12:03
417 查看
关键字 MFC 工具条 状态栏
原作者姓名 zhoujiamurong 介绍
继续介绍工具条和状态栏正文
MFC入门(五) 工具条和状态条(下)
原创 作者:zhoujiamurong
(仅供vchelp网站使用,如需转载请联系zhoujiamurong@163.com)
前几章
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1339
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1343
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1347
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1353
大家都在催我继续写,我真得很想写快点,不过我写这一篇文章得3-4个小时。我不希望大家看了不懂,或者没学到什么东西。写该系列文章,另一个原因就是想还Vchelp站长闻怡洋和雷神的人情,我在学VC很困难的时候,学习了雷神的文章和教程和闻站长的教程.有了很好的学习效果,在市面上很多的书籍一上来就是向导,很多人就是看不明白而放弃学VC。我希望大家也不要放弃,我又将我的这点烂文章,发到www.gameres.com 网站去了.( http://blog.gameres.com/show.asp?BlogID=636&column=0 )希望有更多的人来学习VC,也希望大家有什么体会和心得或发现也能够写出来大家共享J.
下面我接着上一节的内容来讲,我们已经将工具条和状态条的外观画好,现在要为这个工具条和状态栏加上响应,也就是消息映射和处理函数,
我们先将一些无关紧要的消息框去掉。然后添加消息映射,
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) 通过这个函数我们可以得到两个参数:
uFlags 和 point ,这两个参数.我们在MSDN种查到对这两个参数的描述:
nFlags
Indicates whether various virtual keys are down. This parameter can be any combination of the following values:
指示哪些键被按下。这个参数可以是以下值的任意组合:
· 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键
point
Specifies the x- and y-coordinate of the cursor. These coordinates are always relative to the upper-left corner of the window.
指示光标的坐标。这个光标是相对于窗体的左上角的。
这是我们要找的参数就是point,那么这个参数是CPoint 类型的,我们再查CPoint 类型,如何查呢?一种查MSDN,另一种在工程中,右键点击CPoint这个文字,出来的右键菜单中,点击goto the definition of CPoint 。我们看到了MFC的源码,CPoint本身是一个类,但是它是继承于一个结构的(tagPOINT)。我们看它的原始定义:
typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;
所以,我们就认为point 是一个结构。我们就把它当结构来用。我们已经得到了这个坐标(point.x,point.y),但是,它们都是长整型的,我们要把它转换成字符串。转换要使用一个类CString。这是字符串类,当然有转换函数。添加一下代码
CString str;//这是我们最後要赋值的字符串;
CString str_x;//X坐标
CString str_y;//Y坐标
str_x.Format("%d",point.x);//转换point.x到str_x
str_y.Format("%d",point.y); //转换point.y到str_y
str+="X: ";
str+=str_x;
str+=" ";
str+="Y: ";
str+=str_y;//以上是连接字符串到str中
s.SetPaneText(1,str,TRUE);//最后赋值给窗格
str_x.Empty();//下面是释放空间
str_y.Empty();
str.Empty();
我们再运行一下程序,我们晃动鼠标,观察状态栏的变化。是不是和画图软件的状态栏有点象。
下一步,我们添加String Table。再资源中添加,添加一个ID_INDICATOR_CAPS,标题自己定,在添加一个ID_INDICATOR_NUM,标题自己定。
再运行,我们按下num lock 或者 Caps lock键,看一下状态栏的变化,我们就建立了这样一个小程序
下一篇,我们讲GDI,使用GDI来创建一个小的程序.
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1375
正文完
附件:
说明 文章.rar补充: 在本章最后一段里 添加 String Table 后,没看到有什么变化?
还没明白需要在那些地方做 改动!
原作者姓名 zhoujiamurong 介绍
继续介绍工具条和状态栏正文
MFC入门(五) 工具条和状态条(下)
原创 作者:zhoujiamurong
(仅供vchelp网站使用,如需转载请联系zhoujiamurong@163.com)
前几章
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1339
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1343
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1347
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1353
大家都在催我继续写,我真得很想写快点,不过我写这一篇文章得3-4个小时。我不希望大家看了不懂,或者没学到什么东西。写该系列文章,另一个原因就是想还Vchelp站长闻怡洋和雷神的人情,我在学VC很困难的时候,学习了雷神的文章和教程和闻站长的教程.有了很好的学习效果,在市面上很多的书籍一上来就是向导,很多人就是看不明白而放弃学VC。我希望大家也不要放弃,我又将我的这点烂文章,发到www.gameres.com 网站去了.( http://blog.gameres.com/show.asp?BlogID=636&column=0 )希望有更多的人来学习VC,也希望大家有什么体会和心得或发现也能够写出来大家共享J.
下面我接着上一节的内容来讲,我们已经将工具条和状态条的外观画好,现在要为这个工具条和状态栏加上响应,也就是消息映射和处理函数,
我们先将一些无关紧要的消息框去掉。然后添加消息映射,
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) 通过这个函数我们可以得到两个参数:
uFlags 和 point ,这两个参数.我们在MSDN种查到对这两个参数的描述:
nFlags
Indicates whether various virtual keys are down. This parameter can be any combination of the following values:
指示哪些键被按下。这个参数可以是以下值的任意组合:
· 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键
point
Specifies the x- and y-coordinate of the cursor. These coordinates are always relative to the upper-left corner of the window.
指示光标的坐标。这个光标是相对于窗体的左上角的。
这是我们要找的参数就是point,那么这个参数是CPoint 类型的,我们再查CPoint 类型,如何查呢?一种查MSDN,另一种在工程中,右键点击CPoint这个文字,出来的右键菜单中,点击goto the definition of CPoint 。我们看到了MFC的源码,CPoint本身是一个类,但是它是继承于一个结构的(tagPOINT)。我们看它的原始定义:
typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;
所以,我们就认为point 是一个结构。我们就把它当结构来用。我们已经得到了这个坐标(point.x,point.y),但是,它们都是长整型的,我们要把它转换成字符串。转换要使用一个类CString。这是字符串类,当然有转换函数。添加一下代码
CString str;//这是我们最後要赋值的字符串;
CString str_x;//X坐标
CString str_y;//Y坐标
str_x.Format("%d",point.x);//转换point.x到str_x
str_y.Format("%d",point.y); //转换point.y到str_y
str+="X: ";
str+=str_x;
str+=" ";
str+="Y: ";
str+=str_y;//以上是连接字符串到str中
s.SetPaneText(1,str,TRUE);//最后赋值给窗格
str_x.Empty();//下面是释放空间
str_y.Empty();
str.Empty();
我们再运行一下程序,我们晃动鼠标,观察状态栏的变化。是不是和画图软件的状态栏有点象。
下一步,我们添加String Table。再资源中添加,添加一个ID_INDICATOR_CAPS,标题自己定,在添加一个ID_INDICATOR_NUM,标题自己定。
再运行,我们按下num lock 或者 Caps lock键,看一下状态栏的变化,我们就建立了这样一个小程序
下一篇,我们讲GDI,使用GDI来创建一个小的程序.
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1375
正文完
附件:
说明 文章.rar补充: 在本章最后一段里 添加 String Table 后,没看到有什么变化?
还没明白需要在那些地方做 改动!
相关文章推荐
- (转载)MFC入门(三) 作者 zhoujiamurong
- (转载)MFC入门(四) 作者 zhoujiamurong
- (转载)MFC入门(六) 作者 zhoujiamurong
- (转载)MFC入门(一) 作者 zhoujiamurong
- (转载)MFC入门(二) 作者 zhojiamurong
- (转载)VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)
- (转载)VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)
- (转载)DLL动态链接库编程入门之四:MFC规则DLL(下)
- 【转载】VS2010/MFC编程入门之四十二(MFC常用类:CString类)
- (转载)VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)
- (转载)VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)
- (转载)VS2010/MFC编程入门之十六(对话框:消息对话框)
- (转载)VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
- (转载)VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)
- (转载)DLL动态链接库编程入门之五:MFC扩展DLL
- (转载)VS2010/MFC编程入门之十八(对话框:字体对话框)
- (转载)VS2010/MFC编程入门之十(对话框:设置对话框控件的Tab顺序)
- (转载)VS2010/MFC编程入门之十七(对话框:文件对话框)
- (转载)VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)
- (转载)VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上)