有个问题请教,我做了个CTabCtrl,想用右键模拟左键单击,就是说右键也可以切换标签,但是SendMessage后却没有反应,哪个大虾帮帮忙,给个代码,我搞了很久也没结果

解决方案 »

  1.   

    应该用函数吧,类似于SetCurSel之类的
    然后调用“SendNotifyMessage",而不是sendmessage
      

  2.   

    呵呵,用SendMessage(WM_NOTIFY, CONTROL_ID, (LPARAM)pointertoNMHDR)
    下面代码是可以正常工作的,试过了:)
    CTabCtrl *ptab = (CTabCtrl*)GetDlgItem(IDC_TAB1);
    ptab->SetCurSel(1);
    NMHDR *p= new NMHDR;
        p->code = TCN_SELCHANGE;
    p->hwndFrom = ptab->GetSafeHwnd();
    p->idFrom = IDC_TAB1;
    SendMessage(WM_NOTIFY, IDC_TAB1, (LPARAM)p);
      

  3.   

    CTabCtrl *pTab = (CTabCtrl *)GetDlgItem(IDC_TAB1);
    int nIndex = pTab->GetCurSel();
      

  4.   

    使用CTabCtrl 的HitTest函数可以测出当前鼠标点在哪个Tab按钮上,具体看下MSDN就知道了
    下面的代码可以工作:void CtesttabDlg::OnNMRclickTab1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    // TODO: Add your control notification handler code here
    *pResult = 0;
    CTabCtrl *ptab = (CTabCtrl*)GetDlgItem(IDC_TAB1);
    CPoint pt;
    ::GetCursorPos(&pt);
    ptab->ScreenToClient(&pt);
    TCHITTESTINFO tcinfo;
    tcinfo.pt = pt;
    int j = ptab->HitTest(&tcinfo);
    if(j >= 0)
    ptab->SetCurSel(j); NMHDR *p= new NMHDR;
        p->code = TCN_SELCHANGE;
    p->hwndFrom = ptab->GetSafeHwnd();
    p->idFrom = IDC_TAB1;
    SendMessage(WM_NOTIFY, IDC_TAB1, (LPARAM)p);
    }