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。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章