1. 程式人生 > >VC2008中處理CStatic控制元件的單擊STN_CLICKED訊息

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

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。