MFC实现光标在button控件上时,怎么屏蔽控件的连续响应,让控件只响应一次
MFC实现光标在button控件上时,如何屏蔽控件的连续响应,让控件只响应一次?
我用的是OnSetCursor函数
BOOL CmyDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(pWnd == GetDlgItem(IDC_Internet)) //获得IDC_Internet控件的区域,当光标在控件上时,打开网页。
{
SetCursor(LoadCursor(NULL, IDC_HAND));///当光标在控件上时,光标形状发生变化
ShellExecute(0, NULL, _T("http://hao.360.cn"), NULL, NULL, SW_NORMAL);///打开一个网页
return TRUE;
}
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}
执行的结果是控件会连续响应,怎么才能让控件只响应一次,也就是只打开一次网页。我试了加一个bool型的变量,执行后变为false,但是还是不行,一样会响应很多次。
------解决思路----------------------
1、在OnSetCursor()中只完成改变光标形状。
2、在OnLButtonDown()中判断如果在指定区域,才执行打开网页的操作。
OnSetCursor()是一个连续的事件,只要鼠标动就会发生,你将执行打开网页的语句放在此处,当然会连续执行。
------解决思路----------------------
BOOL g_bExecuted =False;
BOOL CmyDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(g_bExecuted )
{
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}
else if(pWnd == GetDlgItem(IDC_Internet)) //获得IDC_Internet控件的区域,当光标在控件上时,打开网页。
{
SetCursor(LoadCursor(NULL, IDC_HAND));///当光标在控件上时,光标形状发生变化
ShellExecute(0, NULL, _T("http://hao.360.cn"), NULL, NULL, SW_NORMAL);///打开一个网页
g_bExecuted =TRUE;
return TRUE;
}
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}
这样应该可以只执行一次
------解决思路----------------------
鼠标移动到控件上, 正确的做法应该是hover事件. 当然, 需要TrackMouseEvent
我用的是OnSetCursor函数
BOOL CmyDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(pWnd == GetDlgItem(IDC_Internet)) //获得IDC_Internet控件的区域,当光标在控件上时,打开网页。
{
SetCursor(LoadCursor(NULL, IDC_HAND));///当光标在控件上时,光标形状发生变化
ShellExecute(0, NULL, _T("http://hao.360.cn"), NULL, NULL, SW_NORMAL);///打开一个网页
return TRUE;
}
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}
执行的结果是控件会连续响应,怎么才能让控件只响应一次,也就是只打开一次网页。我试了加一个bool型的变量,执行后变为false,但是还是不行,一样会响应很多次。
------解决思路----------------------
1、在OnSetCursor()中只完成改变光标形状。
2、在OnLButtonDown()中判断如果在指定区域,才执行打开网页的操作。
OnSetCursor()是一个连续的事件,只要鼠标动就会发生,你将执行打开网页的语句放在此处,当然会连续执行。
------解决思路----------------------
BOOL g_bExecuted =False;
BOOL CmyDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(g_bExecuted )
{
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}
else if(pWnd == GetDlgItem(IDC_Internet)) //获得IDC_Internet控件的区域,当光标在控件上时,打开网页。
{
SetCursor(LoadCursor(NULL, IDC_HAND));///当光标在控件上时,光标形状发生变化
ShellExecute(0, NULL, _T("http://hao.360.cn"), NULL, NULL, SW_NORMAL);///打开一个网页
g_bExecuted =TRUE;
return TRUE;
}
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}
这样应该可以只执行一次
------解决思路----------------------
鼠标移动到控件上, 正确的做法应该是hover事件. 当然, 需要TrackMouseEvent