ShowWindow(SW_HIDE) Release版报错 为啥呢

我辣椒哥 2014-12-31 12:00:45
桌面广播的程序,接收到服务器端数据就显示如下代码
..........................................
if(!IsWindowVisible())
{
m_bHide=FALSE;
ShowWindow(SW_SHOW);
}
SetTimer(1,5000,NULL);// 5秒收不到数据就自动隐藏
.......................
收不到数据5秒种隐藏界面
void CScreenClientDlg::OnTimer(UINT nIDEvent)
{
if(IsWindowVisible())
{
ShowWindow(SW_HIDE);
}
KillTimer(1);
CDialog::OnTimer(nIDEvent);
}
手动隐藏界面
void CScreenClientDlg::OnMenuitemExit()
{

if(IsWindowVisible())
{

GetForegroundWindow()->ShowWindow(SW_HIDE);

}
}

调试没问题 发布成Release版就报错0x004298e1指令引用“0x0000007e9”内存。改内存不能为“read”。错误指向如下
BOOL CWnd::ShowWindow(int nCmdShow)
{
ASSERT(::IsWindow(m_hWnd));

if (m_pCtrlSite == NULL)
return ::ShowWindow(m_hWnd, nCmdShow);
else
return m_pCtrlSite->ShowWindow(nCmdShow);《--------------------指向这里nCmdShow为0
}
...全文
210 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2014-12-31
  • 打赏
  • 举报
回复
GetForegroundWindow() 是否是空? CWnd* pForeWnd = GetForegroundWindow(); if(pForeWnd) { .... }
  • 打赏
  • 举报
回复
::ShowWindow(this->m_hWnd,0); 你的报错原因是窗口句柄无效
oyljerry 2014-12-31
  • 打赏
  • 举报
回复
引用 3 楼 tianmeshi 的回复:
怎么隐藏就报错
窗口句柄是否正确
我辣椒哥 2014-12-31
  • 打赏
  • 举报
回复

void CScreenClientDlg::OnReceived()
{
	BYTE *buffer= new BYTE[MAX_BUFF];
	int factsize =sizeof(sockaddr);[code=c]
int ret;// = recvfrom(m_Socket,(char*)buffer,MAX_BUFF,0,(sockaddr*)&m_Addr,&factsize);这里注释掉就没问题,可以隐藏窗口为啥 if(ret==-1) { m_iRecvCount=1; return; } UDPPACKAGE *pack; pack=(UDPPACKAGE*)buffer; int iCount=pack->iIndex; int iJpegSize=pack->JpegSize; int iBufferSize=pack->buffersize; bool bFinish=pack->bFinish; if(m_iRecvCount==iCount) { memcpy(m_tmp+PICPACKSIZE*(m_iRecvCount-1),pack->buffer,iBufferSize); m_iRecvCount+=1; if(bFinish) { m_iRecvCount=1; ShowScreen(iJpegSize,m_tmp); } } else m_iRecvCount=1; if(!IsWindowVisible()) { m_bHide=FALSE; ShowWindow(SW_SHOW); } SetTimer(1,5000,NULL); delete []buffer; } [/code]
我辣椒哥 2014-12-31
  • 打赏
  • 举报
回复
怎么隐藏就报错
_free 2014-12-31
  • 打赏
  • 举报
回复
m_pCtrlSite 加一个 IsWindow的判断
jacksonfan 2014-12-31
  • 打赏
  • 举报
回复
nCmdShow = 0;就是SW_HIDE
  • 打赏
  • 举报
回复
引用 8 楼 tianmeshi 的回复:
[quote=引用 6 楼 bojie5744 的回复:] ::ShowWindow(this->m_hWnd,0); 你的报错原因是窗口句柄无效
::ShowWindow(this->m_hWnd,SW_HIDE); 这样用后程序界面是消失,程序也自动关闭了 //每5秒进行检测是否有数据 void CScreenClientDlg::OnTimer(UINT nIDEvent) { ::ShowWindow(this->m_hWnd,SW_HIDE); KillTimer(1); CDialog::OnTimer(nIDEvent); } [/quote] 不可能是关闭了,隐藏而已,看进程。 你把程序最小化就知道了 ::ShowWindow(this->m_hWnd,SW_MINIMIZE);
我辣椒哥 2014-12-31
  • 打赏
  • 举报
回复
引用 6 楼 bojie5744 的回复:
::ShowWindow(this->m_hWnd,0); 你的报错原因是窗口句柄无效
::ShowWindow(this->m_hWnd,SW_HIDE); 这样用后程序界面是消失,程序也自动关闭了 //每5秒进行检测是否有数据 void CScreenClientDlg::OnTimer(UINT nIDEvent) { ::ShowWindow(this->m_hWnd,SW_HIDE); KillTimer(1); CDialog::OnTimer(nIDEvent); }

15,979

社区成员

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

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