【问题标题】:Catch tab change event by mouse clicking on the tab通过鼠标单击选项卡来捕获选项卡更改事件
【发布时间】:2016-06-24 09:34:40
【问题描述】:

我有一个CPropertySheet 有几个标签。每个选项卡都有一个不同的 CPropertyPage 类。如果用户单击一个页面(选项卡),则该页面被激活。我如何知道用户是点击了 Tab 还是该页面中的其他位置?

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

BOOL CMyPropertySheet::PreTranslateMessage(MSG* pMsg) 
{
  switch (pMsg->message)
  {
  case WM_LBUTTONDOWN:
    {
    // here I need to handle if user clicks on page (Tabs)
       // But this is invoking if user clicking  inside page also      

    }

  return CPropertySheet::PreTranslateMessage(pMsg);
}

我不知道该怎么做,如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: visual-c++ mfc


    【解决方案1】:

    你想看看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 实现它们。 工作表本身而不是页面需要知道什么原因?

    【讨论】:

    • 这两个函数各有缺点。在处理页面更改时,根据一些输入,我必须关闭属性表并重新打开它(比如刷新之类的东西)。见link。所以这就是为什么我需要在 PretranslateMessage() 中处理页面更改。
    • 当然。 PTM 进行救援。 ?
    【解决方案2】:

    使用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;
    }
    

    这可能对你有帮助。

    【讨论】:

    • 我有属性表和属性页。我不知道如何将它们转换为 Tab 控件。如果你能提供更多代码,我可以提供帮助。
    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2011-03-27
    • 1970-01-01
    • 2011-04-08
    • 2017-12-12
    相关资源
    最近更新 更多