还是全屏退出的问题

wjx_0_2001 2009-08-24 12:39:56
上次,是在全屏后,按ESC后就退出全屏,

现在效果是:有时候能截获到ESC,有时候不能
-----------------------------------------------
现在,想在全屏后,双击鼠标就退出,发现截获不到鼠标的双击消息

-----------------------------------
给出部分代码如下:
void CFullDrawWnd::ShowFullScreen()
{
//为了调试暂时注销 5.9
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,true,NULL,SPIF_SENDCHANGE);//3.17
ShowWindow(SW_SHOW);
//EnableTrayBar(FALSE);//5.9

//SetForegroundWindow();
SetActiveWindow();//这个也是
//this->SetWindowPos(&wndTopMost ,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE |SWP_SHOWWINDOW);
this->SetFocus();

}
=======================================================
BOOL CFullDrawWnd::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE)
{
m_cbmp.Detach();
m_cbmp.DeleteObject();
m_brush.DeleteObject();

DestroyDlg();
//this->OnKillFocus(m_pParentWnd);
m_pParentWnd->PostMessage(SM_RECEIVED,0,0);
return TRUE;
}
return CWnd::PreTranslateMessage(pMsg);
}
==========================================================
void CFullDrawWnd::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_cbmp.Detach();
m_cbmp.DeleteObject();
m_brush.DeleteObject();

DestroyDlg();//退出
//this->OnKillFocus(m_pParentWnd);//这个函数加不加,感觉没有作用
m_pParentWnd->PostMessage(SM_RECEIVED,0,0);
//CDialog::OnLButtonDblClk(nFlags, point);
}
============================
说明:
m_pParentWnd:为产生全屏窗口的父窗口
SM_RECEIVED:退出全屏消息 函数在父窗口中
...全文
287 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjx_0_2001 2009-08-25
  • 打赏
  • 举报
回复
是动态

已经弄好了


结贴……
雪影 2009-08-24
  • 打赏
  • 举报
回复
友情提示,发现楼主有几十个帖子没结~~

1.DestroyDlg();
//this->OnKillFocus(m_pParentWnd);
m_pParentWnd->PostMessage(SM_RECEIVED,0,0);
DestroyDlg会产生不少的消息,将postmessage提前。

2。你先确定是不能获取双击消息还是不能双击退出全屏。
感觉是后者,你获取了双击消息,但是没有退出全屏,而你误以为没有获取双击消息
  • 打赏
  • 举报
回复
没这么复杂吧 你的窗口是动态创建的?
wu_qing_yun 2009-08-24
  • 打赏
  • 举报
回复
帮楼主顶下
windblood 2009-08-24
  • 打赏
  • 举报
回复
学习
qiyexinglang 2009-08-24
  • 打赏
  • 举报
回复
把m_pParentWnd->PostMessage(SM_RECEIVED,0,0); 放到DestroyDlg();的前面试试。
jyh_baoding 2009-08-24
  • 打赏
  • 举报
回复
应该没有这么困难啊
wjx_0_2001 2009-08-24
  • 打赏
  • 举报
回复
return CreateEx(WS_EX_TOOLWINDOW,
AfxRegisterWndClass(WS_EX_TOOLWINDOW,
AfxGetApp()->LoadStandardCursor(IDC_ARROW),
(HBRUSH)m_brush.GetSafeHandle()),
"杨睿的旋转字体",
WS_VISIBLE |WS_POPUP,
0,
0,
x,
y,
pParentWnd->GetSafeHwnd(),
NULL);


还真的没有这个

我先试试

多谢多谢
雪影 2009-08-24
  • 打赏
  • 举报
回复
1. 问一下,你的窗口能不能接收到单击消息?


如果能往下看~~

刚查了一下msdn
Only windows that have the CS_DBLCLKS style can receive WM_LBUTTONDBLCLK messages, which the system generates whenever the user presses, releases, and again presses the left mouse button within the system's double-click time limit.

难道是你的窗口没有CS_DBLCLKS属性?
你给窗口添加CS_DBLCLKS 属性试一试
wjx_0_2001 2009-08-24
  • 打赏
  • 举报
回复
没有接收到双击的命令

BOOL CFullDrawWnd::PreTranslateMessage(MSG* pMsg)

在这里面,但是ESC按键消息是能接收到的
雪影 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wjx_0_2001 的回复:]
对了,还有一点,就是在这个全屏窗口上

在这个全屏窗口刚创建的时候,用到了位图画刷

是不是跟这个有关系?
[/Quote]
和这个没关系
我现在还没有搞明白
1.你是接收不到双击消息,
2.还是ShowFullScreen函数全屏窗口无效?
wjx_0_2001 2009-08-24
  • 打赏
  • 举报
回复
对了,还有一点,就是在这个全屏窗口上

在这个全屏窗口刚创建的时候,用到了位图画刷

是不是跟这个有关系?
wjx_0_2001 2009-08-24
  • 打赏
  • 举报
回复
TO tttyd:

对话框上,一个全屏的按钮,点击这个按钮后,CFULLWND产生

这个就是整个全屏的窗口 没有子窗口
wjx_0_2001 2009-08-24
  • 打赏
  • 举报
回复
TO tttyd:

对话框上,一个全屏的按钮,点击这个按钮后,CFULLWND产生

这个就是整个全屏的窗口 没有子窗口
雪影 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wjx_0_2001 的回复:]
引用 3 楼 fandh 的回复:
双击消息,干脆也用:PreTranslateMessage 截取!


好象不行

代码如下:
BOOL CFullDrawWnd::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE)
{
m_cbmp.Detach();
m_cbmp.DeleteObject();
m_brush.DeleteObject();

DestroyDlg();
//this->OnKillFocus(m_pParentWnd);
m_pParentWnd->PostMessage(SM_RECEIVED,0,0);
return TRUE;
}
else
{
if(pMsg->message==WM_LBUTTONDBLCLK)
{

m_cbmp.Detach();
m_cbmp.DeleteObject();
m_brush.DeleteObject();

DestroyDlg();
//this->OnKillFocus(m_pParentWnd);
m_pParentWnd->PostMessage(SM_RECEIVED,0,0);
return TRUE;
}
}
return CWnd::PreTranslateMessage(pMsg);
}

跟踪都不能都这一步
[/Quote]
1.你的CFullDrawWnd窗口上有没有子窗口?
2. if(pMsg->message==WM_LBUTTONDBLCLK)
{
AfxMessageBox("测试双击是不是响应");
}
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
wjx_0_2001 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fandh 的回复:]
双击消息,干脆也用:PreTranslateMessage 截取!
[/Quote]

好象不行

代码如下:
BOOL CFullDrawWnd::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE)
{
m_cbmp.Detach();
m_cbmp.DeleteObject();
m_brush.DeleteObject();

DestroyDlg();
//this->OnKillFocus(m_pParentWnd);
m_pParentWnd->PostMessage(SM_RECEIVED,0,0);
return TRUE;
}
else
{
if(pMsg->message==WM_LBUTTONDBLCLK)
{
m_cbmp.Detach();
m_cbmp.DeleteObject();
m_brush.DeleteObject();

DestroyDlg();
//this->OnKillFocus(m_pParentWnd);
m_pParentWnd->PostMessage(SM_RECEIVED,0,0);
return TRUE;
}
}
return CWnd::PreTranslateMessage(pMsg);
}

跟踪都不能都这一步
wjx_0_2001 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tttyd 的回复:]
友情提示,发现楼主有几十个帖子没结~~

1.DestroyDlg();
//this->OnKillFocus(m_pParentWnd);
m_pParentWnd->PostMessage(SM_RECEIVED,0,0);
DestroyDlg会产生不少的消息,将postmessage提前。

2。你先确定是不能获取双击消息还是不能双击退出全屏。
  感觉是后者,你获取了双击消息,但是没有退出全屏,而你误以为没有获取双击消息

[/Quote]

呵呵,已经结贴了

多谢多谢
fandh 2009-08-24
  • 打赏
  • 举报
回复
双击消息,干脆也用:PreTranslateMessage 截取!
wjx_0_2001 2009-08-24
  • 打赏
  • 举报
回复
不能获取双击消息

跟踪过


后者

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧