禁用CvNamedWindow中的关闭按钮

  http://www.cnblogs.com/zby03/articles/807495.html

直接摘来如下:

今天在写一个MFC程序时,需要临时禁用cvNamedWindow所创建窗口系统菜单上的关闭按钮,
开始觉得没什么,直接写代码如下:

HWND hCvWnd=(HWND)cvGetWindowHandle(windowTitle);
CWnd* pCvWnd=CWnd::FromHandle(hCvWnd);
if(pCvWnd!=NULL)
{
     CMenu* pSystemMenu=pCvWnd->GetSystemMenu(FALSE);
     if(pSystemMenu!=NULL)
         pSystemMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);
}

进行测试,没有达到预期目的。开始以为可能是方法不对,用其他几种方法试验,
仍达不到预期效果。调试好久,偶然发现使用cvNamedWindow创建窗口时,其实创建了两个窗口,
一个容器窗口和一个子窗口,创建时的窗口名称为子窗口的名称。
因此将原先的代码修改如下后则可达到预期目的。

HWND hCvWnd=(HWND)cvGetWindowHandle(windowTitle);
CWnd* pCvWnd=CWnd::FromHandle(hCvWnd);
if(pCvWnd!=NULL)
{
     CMenu* pSystemMenu=pCvWnd->GetParent()->GetSystemMenu(FALSE);
     if(pSystemMenu!=NULL)
          pSystemMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);
}

试之,然也,但是觉得如果每个窗口都写这么一段岂不是也挺费劲,干脆将其作为一个函数使用,反正参数只有一个即:windowtitle,改为一个全局函数(虽然不太好)

如下:

void CloseDisable(char *title)
{
 HWND hCvWnd = (HWND)cvGetWindowHandle( title );
 CWnd* pCvWnd = CWnd::FromHandle(hCvWnd);
 if(pCvWnd != NULL)
 {
  CMenu* pSystemMenu = pCvWnd->GetParent()->GetSystemMenu(FALSE);
  if(pSystemMenu != NULL)
   pSystemMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);
 } 
}

这样如果不想让cvNamedWindow创建的窗口的关闭按钮可用,就调用一下该函数即可,参数很简单,就是窗口名字,试了一下,还是不错的!这样就不用担心误点了叉号关闭窗口后进程无法退出了,因为根本点不了了!哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值