zoukankan      html  css  js  c++  java
  • VC2008中处理CStatic控件的单击STN_CLICKED消息

         在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。


    
    
  • 相关阅读:
    WPF 自适应布局控件
    c# 将Datarow转成Datarowview
    C# 全局Hook在xp上不回调
    WPF datagrid AutoGenerateColumns隐藏部分列
    WPF wpf中按钮操作权限控制
    C# autofac配置文件中设置单例
    Castle ActiveRecord 二级缓存使用 异常记录
    VS2013 抛出 stackoverflow exception 的追踪
    CastleActiveRecord在多线程 事务提交时数据库资源竞争导致更新失败的测试结果记录
    WF4.0 工作流设计器 传入参数问题记录?
  • 原文地址:https://www.cnblogs.com/ccf19881030/p/12004846.html
Copyright © 2011-2022 走看看