VC2008中處理CStatic控制元件的單擊STN_CLICKED訊息
阿新 • • 發佈:2019-01-22
在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。