在MFC中,静态文本CStatic控件主要是用来作为标签,即作为注释用的。一般情况下不做消息响应。但是有时特殊情况下会做一些消息响应,比如处理单击事件STN_CLICKED等。

在VC2008下使用MFC创建了一个基于对话框的应用程序。添加一个CStatic控件,修改其Caption属性为:Number1:

默认情况下MFC中所有新添加的静态控件的ID是一样的,都是IDC_STATIC,如果想要使用某个STATIC控件进行消息响应,则首先需要修改该控件ID,比如将其ID修改成IDC_NUMBER1。

对于上述ID为IDC_NUMBER1的CStatic控件,在其属性中添加了STN_CLICKED的消息响应函数,

自动生成一个消息映射如下:

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
ON_STN_CLICKED(IDC_NUMBER1, &CTestDlg::OnStnClickedNumber1)
END_MESSAGE_MAP()

函数声明为:

afx_msg void OnStnClickedNumber1();

实现体为:

void CTestDlg::OnStnClickedNumber1()
{
// TODO: Add your control notification handler code here
CString strNum1;
GetDlgItem(IDC_NUMBER1)->GetWindowText(strNum1);
if (strNum1 == _T("Number1:"))
{
GetDlgItem(IDC_NUMBER1)->SetWindowText(_T("数值1:"));
}
else
{
GetDlgItem(IDC_NUMBER1)->SetWindowText(_T("Number1:"));
}
}

接着运行了程序,当单击CStatic控件时,其值未发生变化,查阅了MSDN中关于Static Controls Messages 中的STN_CLICKED 消息,有如下描述:

STN_CLICKED

This message is sent when the user clicks a static control that has the SS_NOTIFY style.

原来需要在VS2008中修改ID为IDC_NUMBER1的CStatic控件的Notify属性(即SS_NOTIFY风格),将其改成TRUE就OK了,默认的属性为FASLE,即静态文本控件在默认情况下是不发送通告消息的。

总结如下,为了使得一个静态文本控件能够响应鼠标单击消息,那么需要进行两个特殊的步骤:

1、改变它的ID。(默认统一为IDC_STATIC)

2、在属性对话框中,将其notify属性设置为true。




VC2008中处理CStatic控件的单击STN_CLICKED消息的更多相关文章

  1. VC中动态添加控件

    VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...

  2. MFC中动态添加控件----寻找多年的秘籍,吐血推荐

    原文作者tianwaik 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立 ...

  3. 在DevExpress程序中使用SplashScreenManager控件实现启动闪屏和等待信息窗口

    在我很早的WInform随笔<WinForm界面开发之"SplashScreen控件">有介绍如何使用闪屏的处理操作,不过那种是普通WInform和DevExpress ...

  4. C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变(转)

    在设计可供用户调整大小的窗体时,如何实现该窗体上的控件也应能正确地随窗体的改变而自动调整大小并且能重新定位?此时就要借助控件的.Anchor属性.Anchor属性定义控件的定位点位置.当控件锚定到某个 ...

  5. C# 常用控件及单击事件

    1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2)WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三种: No ...

  6. WPF-在Grid中编程添加控件

    摘要: 在Grid中编程添加控件,布局控件的位置用到的代码是: gridLayout.Children.Add(textblock); Grid.SetRow(textblock, ); Grid.S ...

  7. ASP.NET AJAX入门系列(11):在多个UpdatePanle中使用Timer控件

    本文将使用Timer控件更新两个UpdatePanel控件,Timer控件将放在UpdatePanel控件的外面,并将它配置为UpdatePanel的触发器,翻译自官方文档. 主要内容 在多个Upda ...

  8. Android自动化测试中AccessibilityService获取控件信息(1)

    Android自动化测试中AccessibilityService获取控件信息(1) 分类: android自动化测试2014-03-24 15:31 3455人阅读 评论(16) 收藏 举报 and ...

  9. 怎样在不对控件类型进行硬编码的情况下在 C#vs 中动态添加控件

    文章ID: 815780 最近更新: 2004-1-12 这篇文章中的信息适用于: Microsoft Visual C# .NET 2003 标准版 Microsoft Visual C# .NET ...

随机推荐

  1. electron测试TCP通信

    这几天学习了一下Elctron,对于这个应用有了一点简单的认识,将这个过程记录一下. 首先,electron会加载main.js,在这里将整个程序启动,相当于其他程序的main函数了. 我是基于ele ...

  2. SQLServer2008不允许保存更改

    sql server 2008在更改表结构的时候提示 “不允许保存更改,您所做的更改要求删除并重新创建以下表” 解决方案: 1.一般情况下:工具--选项--Designers--表设计器和数据库设计器 ...

  3. js中浅谈this对象(未补充完整)

    什么是this? 1.javascript语言中,一切皆为对象(除了 undefined 和 null 之外),运行环境也是对象,所以函数都是在某个对象之中运行,this就是这个对象(环境). 2.t ...

  4. scrapy框架--新建调试的main.py文件

    一.原因: 由于pycharm中没有scrapy的一个模板,所有没办法直接在scrapy文件中调试,所有我们需要写一个自己的main.py文件,在文件里面调用命令行,来实现scrapy的一个调试.(在 ...

  5. Java必备主流技术流程图,写得非常好!

    作者:Jay_huaxiao https://juejin.im/post/5d214639e51d4550bf1ae8df 1.spring的生命周期 Spring作为当前Java最流行.最强大的轻 ...

  6. CSS3 3D旋转下拉菜单--兼容性不太好

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. Xcode开发时碰到的问题

    1.打包成功后,发布到蒲公英上,显示"未签名,只能越狱手机可以安装". 出现这个问题,是因为打包的时候签名没有获取到.下面是配置签名的大概步骤. 打包的时候需要点击左上角选择这个设 ...

  8. 小程序中this.setData的使用和注意事项

    前言:微信小程序中经常需要用到this.setData({})把变量值渲染到视图层,那到底什么是this.setData,如何使用?需要注意哪些?作为一个初学者,分享一点我的经验,希望大家批评指正. ...

  9. xshell xftp使用

    1.xftp传输的中文上去乱码,是因为传输时使用GB2312,而服务端不是GB2312 使用UTF-8编码上传即可

  10. mysql slave节点多线程复制

    线上一个mysql主备延迟很大,master节点写入频繁,slave节点积累大量relay-log无法即使写入. 参考:https://www.cnblogs.com/conanwang/p/6006 ...