Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1665984
  • 博文数量: 585
  • 博客积分: 14610
  • 博客等级: 上将
  • 技术积分: 7402
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-15 10:52
文章存档

2013年(5)

2012年(214)

2011年(56)

2010年(66)

2009年(44)

2008年(200)

分类:

2009-06-03 16:20:12

        VC精华教程:MFC入门系列(五)


一.响应消息

   工具条和状态栏加上响应,也就是消息映射和处理函数,我们先将一些无关紧要的消息框去掉。然后添加消息映射:

 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键,看一下状态栏的变化,我们就建立了这样一个小程序。
阅读(758) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~