在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 消息,有如下描述:
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。