环境:VS2008 MFC
问题:我重绘了按钮,分为3个状态:正常、鼠标进入、鼠标按下;当点击鼠标时会在按钮下面弹出右键菜单。现在问题是右键菜单弹出后,按钮的按下状态就消失了!!请问如何在弹出菜单时使按钮保持按下状态,在菜单消失时按钮状态恢复正常?
问题:我重绘了按钮,分为3个状态:正常、鼠标进入、鼠标按下;当点击鼠标时会在按钮下面弹出右键菜单。现在问题是右键菜单弹出后,按钮的按下状态就消失了!!请问如何在弹出菜单时使按钮保持按下状态,在菜单消失时按钮状态恢复正常?
解决方案 »
- 我的服务器有两个cpu,如何使用程序控制一个cpu只执行我的线程?
- 完成端口socket传输文件的问题。
- 请问,如何设置CPropertySheet在Dialog上的位置?
- CListCtrl的小问题
- 明天休息喽,慰劳加班的同志
- 如何使标题栏上的"X"按钮,变灰?
- 没道理有错啊!
- 如果gethostbyname()的参数是一个没有开启的计算机怎样让它不弹出拨号,注意不能修改IE设置
- 怪哉!DBGrid控件打开数表运行后正常,但只要一点其中一条记录就会重新排序!并且第一条记录看不见,但是仍然有那条记录!
- win32开发,点击ListView红框中的item, 怎么出现下拉框并选择框中的数据?
- 示例代码浏览器
- MFC中 怎么获取到TXT文件中 双引号中间的字符?
SetCapture
我资源里有右键菜单的demo
LRESULT CxxxDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_UNINITMENUPOPUP)
{
m_btn.SetState(FALSE);
}
return CDialog::WindowProc(message, wParam, lParam);
}void CxxxDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu Menu;
Menu.CreatePopupMenu();
//要动态创建菜单,自己AppendMenu吧
//Menu.AppendMenu(...);
//Menu.AppendMenu(...);
m_btn.SetState(TRUE);
Menu.TrackPopupMenu(TPM_CENTERALIGN, point.x, point.y, this);
Menu.DestroyMenu();
}
{
if (pWnd == (CWnd*)&m_btn)
{
CMenu Menu;
Menu.CreatePopupMenu();
//要动态创建菜单,自己AppendMenu吧
//Menu.AppendMenu(...);
//Menu.AppendMenu(...);
m_btn.SetState(TRUE);
Menu.TrackPopupMenu(TPM_CENTERALIGN, point.x, point.y, this);
Menu.DestroyMenu();
}
}
那只是个例子,不一定要OnContextMenu的,按钮的OnLButtonDown也行啊
void CxxxButton::OnLButtonDown(UINT nFlags, CPoint point)
{
CMenu Menu;
Menu.CreatePopupMenu();
//要动态创建菜单,自己AppendMenu吧
//Menu.AppendMenu(...);
//Menu.AppendMenu(...);
SetState(TRUE);
ClientToScreen(&point);
Menu.TrackPopupMenu(TPM_CENTERALIGN, point.x, point.y, this);
Menu.DestroyMenu();
//CButton::OnLButtonDown(nFlags, point);
}LRESULT CxxxButton::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_UNINITMENUPOPUP)
{
SetState(FALSE);
}
return CButton::WindowProc(message, wParam, lParam);
}