2016-06-24 4 views
1

Ich habe eine CPropertySheet mit mehreren Registerkarten. Ich habe eine andere CPropertyPage Klasse für jede Registerkarte. Klickt der Nutzer auf die eine Seite (Tab), wird diese Seite aktiviert. Wie kann ich wissen, ob der Nutzer auf Tab oder anderswo auf dieser Seite geklickt hat?Fang Registerkarte ändern Ereignis durch Mausklick auf die Registerkarte

enter image description here

Ich versuche, dieses Ereignis (WM_LBUTTONDOWN) in PreTranslateMessage() der Eigenschaftsklasse zu erhalten.

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); 
} 

Ich habe keine Ahnung, was zu tun wäre ich wirklich jede Hilfe dankbar.

Antwort

0

Verwenden TCN_SELCHANGE

Funktion Körper wird so etwas wie dieses

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

sein Das ist für Sie hilfreich sein können.

+0

Ich habe Eigenschaftenblätter und Eigenschaftenseiten. Ich weiß nicht, wie man sie in Tab-Control umwandelt. Ich könnte hilfreich sein, wenn Sie mehr Code zur Verfügung stellen können. –

1

Sie möchten OnSetActive und OnKillActive ansehen.

Sie bieten ein Beispiel:

// 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(); 
} 

Das ist, was ich benutze. Sie können sie vom Klassenassistenten implementieren. Gibt es einen Grund, dass die Blatt selbst wissen muss, anstatt die Seite?

+0

Diese beiden Funktionen haben ihre eigenen Nachteile. Bei der Bearbeitung von Seitenänderungen muss ich auf der Grundlage einiger Eingaben das Eigenschaftsfenster schließen und es erneut öffnen (wie bei der Aktualisierung). siehe [link] (https://msdn.microsoft.com/en-us/library/bb774568%28v=vs.85%29.aspx). Deshalb muss ich die Seitenänderungen in PretranslateMessage() behandeln. –

+0

Sicher. PTM zur Rettung. –