对话框子控件隐藏问题,ShowWindow(SW_HIDE)不起作用了

善良超锅锅 2013-04-30 11:39:39
我有两个按钮(IDC_START_CAPTURE和IDC_STOP_CAPTURE)和一个Picture控件(IDC_PICTURE)。
以下我简称START,STOP,PICTURE.
我想让START和STOP不能同时显示出来。START和PICTURE也不能同时显示。
我把STOP和PICTURE的visible属性设为false。所以初始状态下只有START按钮显示出来了。
在START按钮的单机事件中处理函数中,我将START按钮隐藏,将STOP和PICTURE控件显示出来。

void CameraWind::OnBnClickedStartCapture()
{
pCapture->Run();
GetDlgItem(IDC_START_CAPTURE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_PICTURE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STOP_CAPTURE)->ShowWindow(SW_SHOW);
}

上面的代码能正确运行,效果如我所料。
我再在STOP按钮的点击事件处理函数中将START显示,将STOP和PICTURE控件隐藏。可是他们都隐藏不了。

void CameraWind::OnBnClickedStopCapture()
{
GetDlgItem(IDC_STOP_CAPTURE)->ShowWindow(SW_HIDE);//无效
GetDlgItem(IDC_PICTURE)->ShowWindow(SW_HIDE); //无效
pCapture->Stop();
GetDlgItem(IDC_START_CAPTURE)->ShowWindow(SW_SHOW);//有效
UpdateWindow();
}

上面的ShowWindow(SW_HIDE)为什么会无效呢?
ps:上面控件所属的对话框为一个子对话框。
...全文
697 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
善良超锅锅 2013-04-30
  • 打赏
  • 举报
回复
引用 7 楼 zyq5945 的回复:
SetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE, GetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE) | WS_VISIBLE); //显示 SetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE, GetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE) & ~WS_VISIBLE); //隐藏 在加上Invalidate刷新界面,控制界面的话可以也考虑用EnableWindow。
pWND是子空间的局部吗?
zyq5945 2013-04-30
  • 打赏
  • 举报
回复
SetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE, GetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE) | WS_VISIBLE); //显示 SetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE, GetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE) & ~WS_VISIBLE); //隐藏 在加上Invalidate刷新界面,控制界面的话可以也考虑用EnableWindow。
善良超锅锅 2013-04-30
  • 打赏
  • 举报
回复
引用 5 楼 zyq5945 的回复:
你把其他业务相关的代码先屏蔽掉,只留界面的代码看看。
我在这个两个事件处理函数中注释掉了 pCapture->Stop();和 pCapture->Run(); 还是没用。 只有IDC_START_CAPTURE按钮听话。它是自绘属性
zyq5945 2013-04-30
  • 打赏
  • 举报
回复
你把其他业务相关的代码先屏蔽掉,只留界面的代码看看。
善良超锅锅 2013-04-30
  • 打赏
  • 举报
回复
看来不是OnDrawItem的问题,我把它删了,还是老样子
善良超锅锅 2013-04-30
  • 打赏
  • 举报
回复
引用 1 楼 zyq5945 的回复:
刷新下界面
GetDlgItem(IDC_STOP_CAPTURE)->ShowWindow(SW_HIDE);//无效
    GetDlgItem(IDC_PICTURE)->ShowWindow(SW_HIDE);     //无效
    pCapture->Stop();
    GetDlgItem(IDC_START_CAPTURE)->ShowWindow(SW_SHOW);//有效
    UpdateWindow();
this->Invalidate();
会不会是因为我重载了OnDrawItem,因为IDC_START_CAPTURE是自绘属性。

void CameraWind::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CButton *pbtn = (CButton*)GetDlgItem(nIDCtl);
	Graphics grahp(pbtn->GetDC()->m_hDC);
	Image Image(L"res/startcapture.png");
	grahp.DrawImage(&Image,Rect(0,0,128,128),0,0,128,128,UnitPixel,NULL);
	
	CDialogEx::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
善良超锅锅 2013-04-30
  • 打赏
  • 举报
回复
引用 1 楼 zyq5945 的回复:
刷新下界面
GetDlgItem(IDC_STOP_CAPTURE)->ShowWindow(SW_HIDE);//无效
    GetDlgItem(IDC_PICTURE)->ShowWindow(SW_HIDE);     //无效
    pCapture->Stop();
    GetDlgItem(IDC_START_CAPTURE)->ShowWindow(SW_SHOW);//有效
    UpdateWindow();
this->Invalidate();
还是没用啊。
zyq5945 2013-04-30
  • 打赏
  • 举报
回复
刷新下界面
GetDlgItem(IDC_STOP_CAPTURE)->ShowWindow(SW_HIDE);//无效
    GetDlgItem(IDC_PICTURE)->ShowWindow(SW_HIDE);     //无效
    pCapture->Stop();
    GetDlgItem(IDC_START_CAPTURE)->ShowWindow(SW_SHOW);//有效
    UpdateWindow();
this->Invalidate();
善良超锅锅 2013-04-30
  • 打赏
  • 举报
回复
引用 14 楼 schlafenhamster 的回复:
“两个按钮” 多余,一个够了!
嗯是的,一个按钮。让它移动就行。我二了
schlafenhamster 2013-04-30
  • 打赏
  • 举报
回复
“两个按钮” 多余,一个够了!
善良超锅锅 2013-04-30
  • 打赏
  • 举报
回复
我重载OnEraseBkgnd是为了让对话框背景透明。
善良超锅锅 2013-04-30
  • 打赏
  • 举报
回复
引用 11 楼 zyq5945 的回复:
用EnableWindow不可以吗。
原来是我重装了OnEraseBkgnd所致。烦了一上午。我去。 用EnableWindow只能使之无效有效,我想让它见或不见,节省界面位置。美观一点。
zyq5945 2013-04-30
  • 打赏
  • 举报
回复
用EnableWindow不可以吗。
善良超锅锅 2013-04-30
  • 打赏
  • 举报
回复
难道是因为控件所属的对话框时子对话框的原因?
善良超锅锅 2013-04-30
  • 打赏
  • 举报
回复
引用 7 楼 zyq5945 的回复:
SetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE, GetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE) | WS_VISIBLE); //显示 SetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE, GetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE) & ~WS_VISIBLE); //隐藏 在加上Invalidate刷新界面,控制界面的话可以也考虑用EnableWindow。
还是没用啊。

15,979

社区成员

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

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