2016-06-24 10 views
1

私はCPropertySheetにいくつかのタブがあります。私は各タブごとに異なるCPropertyPageクラスを持っています。ユーザーが1ページ(タブ)をクリックすると、そのページがアクティブになります。ユーザーがTabをクリックしたのか、そのページの他の場所をクリックしたのかをどのように知ることができますか?タブをマウスでクリックしてタブを変更するイベントをキャッチ

enter image description here

私は、プロパティシートクラスの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); 
} 

私は何をすべきか分かりません。本当に助けに感謝します。

答えて

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

のようなものになります。

+0

私はプロパティシートとプロパティページを持っています。私はそれらをタブコントロールに変換する方法はありません。あなたがもっとコードを提供できるなら、私は助けになるかもしれません。 –

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から実装できます。 シートは、ページではなく、それ自体が知る必要がある理由はありますか?

+0

これら2つの機能にはそれぞれ欠点があります。ページの変更を処理する際、入力に基づいて、プロパティシートを閉じて再表示する必要があります(リフレッシュのようなもの)。 [link](https://msdn.microsoft.com/en-us/library/bb774568%28v=vs.85%29.aspx)を参照してください。そのため、PretranslateMessage()のページの変更を処理する必要があります。 –

+0

救助へのPTM。 –

関連する問題