Why double click event detecting on empty area of

2019-08-02 08:34发布

case 1 : I have a MFC dialog box having a LisBox.
I have added two items in listbox.
Whenever i am double clicking on empty area of list box i.e. not double clicking 
on either of two item. 
Double click is detecting on empty area of listbox.

case 2: When i created a small MFC test application with listbox. it iis detecting double click only on item, not on empty area.
I compared all properties of both cases but couldn't figure out what is the problem.

Anyone has idea what is going wrong in case 1.

标签: mfc
1条回答
Emotional °昔
2楼-- · 2019-08-02 08:55

I think it is abnormal process. I've tested your situation in VS2010. In my MFC test application sent LBN_DBLCLK when I double clicked on empty area. If you do not really want to know the reason this weired situation, you can just check whether double click event is occurred on empty area or not. I think it is better way for saving your time.

void CMfcDlgTestDlg::OnLbnDblclkList2()
{
    // TODO: Add your control notification handler code here
    CListBox* list =  (CListBox*)(GetDlgItem(IDC_LIST2));
    int cur_sel = list->GetCurSel();
    if (cur_sel == -1)
    {
        return;
    }
}

EDIT : FOR ANOTHER CASE When one of list box item is already selected, how can it handle on ON_LBN_DBLCLK handler? I think there will be some available methods for solving this, however I use below code and it can be useful way, also.

void CMfcDlgTestDlg::OnLbnDblclkList2()
{
    // TODO: Add your control notification handler code here

    CListBox* list =  (CListBox*)(GetDlgItem(IDC_LIST2));

    CPoint cursor;
    cursor.x = GetCurrentMessage()->pt.x;
    cursor.y = GetCurrentMessage()->pt.y;

    list->ScreenToClient(&cursor);

    BOOL is_outside = FALSE;
    UINT item_index = list->ItemFromPoint(cursor, is_outside);

    if(is_outside)
    {
        //mouse clicked on empty area
        return ;
    }
    else
    {
        // do something with 'item_index'

    }

}

I hope this will help you a little.

查看更多
登录 后发表回答