通过鼠标单击选项卡捕获选项卡更改事件

时间:2016-06-24 09:34:40

标签: visual-c++ mfc

我有一个带有多个标签的Example: n=9; W=[0 1; 0 2; 0 3; 0 4; 0 5; 1 6; 2 6; 3 6]; k=1; W_1=[{[0 1]}; {[0 2; 0 3; 0 4; 0 5; 1 6; 2 6; 3 6]}]; W_2=[{[0 2]}; {[0 1; 0 3; 0 4; 0 5; 1 6; 2 6; 3 6]}]; W_3=[{[0 3]}; {[0 1; 0 2; 0 4; 0 5; 1 6; 2 6; 3 6]}]; W_4=[{[0 4]}; {[0 1; 0 2; 0 3; 0 5; 1 6; 2 6; 3 6]}]; W_5=[{[0 5]}; {[0 1; 0 2; 0 3; 0 4; 1 6; 2 6; 3 6]}]; W_6=[{[1 6]}; {[0 1; 0 2; 0 3; 0 4; 0 5; 2 6; 3 6]}]; W_7=[{[2 6]}; {[0 1; 0 2; 0 3; 0 4; 0 5; 1 6; 3 6]}]; W_8=[{[3 6]}; {[0 1; 0 2; 0 3; 0 4; 0 5; 1 6; 2 6]}]; 。每个选项卡都有一个不同的CPropertySheet类。如果用户单击一个页面(Tab),则该页面将被激活。如何知道用户是否点击了Tab或该页面中的其他位置?

enter image description here

我正在尝试在属性表类的CPropertyPage中获取该事件(WM_LBUTTONDOWN)。

PreTranslateMessage()

我不知道该怎么做我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:2)

您想查看OnSetActiveOnKillActive

他们提供了一个例子:

// CShapePage is the last wizard property page. Enable the Back 
// button and change the Next button to Finish. The "Finish" button 
// will have "Done" as its caption.
BOOL CShapePage::OnSetActive() 
{
   CPropertySheet* psheet = (CPropertySheet*) GetParent();   
   psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
   psheet->SetFinishText(_T("Done"));

   return CPropertyPage::OnSetActive();
}

这就是我使用的。您可以从ClassWizard实现它们。 表单本身需要知道而不是页面是否有任何理由?

答案 1 :(得分:0)

使用TCN_SELCHANGE

函数体将是这样的

void CDlgName::OnTcnSelchangeFuncName(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: Add your control notification handler code here

    int nCur = m_tabSettings.GetCurSel();
    if(nCur == 0)        //first tab clicked
    {
        //your code
    }
    else if(nCur == 1){  //Second tab clicked
        //your code
    }
    else if(nCur == 2){  //Third tab clicked
    {
        //your code
    }
    *pResult = 0;
}

这可能对您有所帮助。