在一个Formview上,弹出了一个非模式对话框,需要禁止对FormView上的control得操作,该怎么做.

harrypotter 2003-10-15 08:49:13
如题,使用EnableWindow FormView虽然当时不能单击FormView上得control,但是当隐藏了非模式对话框后,在FormView上得动作又执行了.
请问该怎么做.

不能把对话框改成模式的.
...全文
84 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
harrypotter 2003-12-07
  • 打赏
  • 举报
回复
揭帖
VCNULL 2003-10-17
  • 打赏
  • 举报
回复
gz
UDX协议 2003-10-16
  • 打赏
  • 举报
回复
所有的按扭事件都要经过oncmdmsg这个函数
CTestmdiView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)

{
if(对话框弹起)
{
return true;
}else
{
return CFormView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
}
还有WM_SYSCOMMAND
UDX协议 2003-10-16
  • 打赏
  • 举报
回复
所有的按扭事件都要经过oncmdmsg这个函数
CTestmdiView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)

{
if(对话框弹起)
{
return false;
}else
{
return CFormView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
}
还有WM_SYSCOMMAND
UDX协议 2003-10-16
  • 打赏
  • 举报
回复
所有的按扭事件都要经过oncmdmsg这个函数
CTestmdiView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)

{
if(对话框弹起)
{
return ;
}else
{
return CFormView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
}
还有WM_SYSCOMMAND
harrypotter 2003-10-16
  • 打赏
  • 举报
回复
upup
harrypotter 2003-10-16
  • 打赏
  • 举报
回复
up
harrypotter 2003-10-15
  • 打赏
  • 举报
回复
to wwwllg(wwwllg) :
以上的例子只是我为了模拟的,实际上我是再两个自定义消息中分别Enable view和Disable view的,
应该不是你所说的那种因为在OnButton2() 中即disable了又enable了.
我不愿意象你所说的那样枚举所有控件,然后disable他们,
有两个原因,一来控件比较多,这样比较麻烦.
二来,控件本身还有的是enable有的是disable,如果象你所说的那样控制,我需要保存他们的状态.

不知道有没有其它的解决办法,
我总觉得Enable或者disable整个formview应该是解决之道,

不知道有没有什么办法,当disable view的时候把当前的键盘操作都让CDlg对话框捕捉,
当enable view的时候,在恢复.
我试了用setcapture,好像不行.

谢谢.
hdqqq 2003-10-15
  • 打赏
  • 举报
回复
你在formiview中创建这个非模式对话框,在对话框显示的时候,在formview中禁止control,当对话框关闭后,在启动control
UDX协议 2003-10-15
  • 打赏
  • 举报
回复
在m_dlg的ondestroywindow的时候再枚举一下view的子控件。具体的方法有很多种。
UDX协议 2003-10-15
  • 打赏
  • 举报
回复
void CTryFormViewView::OnButton2()
{
// TODO: Add your control notification handler code here
// EnableWindow(FALSE);

EnumChildWindows(m_hWnd,EnumChildProc);
m_dlg.ShowWindow(SW_SHOW);


}
BOOL CALLBACK EnumChildProc(
HWND hwnd, // handle to child window
LPARAM lParam // application-defined value
)
{
disnable(hwnd);//

}

此处因为你在OnButton2() 点击,虽然你EnableWindow(FALSE);但是你又EnableWindow();因为你现在还没有退出OnButton2()
实际上,没有改变view的属性,所以Button3还是可以点。
你应在弹出的对话框的退出函数里,再EnumChildWindows,枚举一下view的子控件,通过变量来表示,两种行为,把他们再激活。
harrypotter 2003-10-15
  • 打赏
  • 举报
回复
楼上的,当然不能这样啊
zjlgigi 2003-10-15
  • 打赏
  • 举报
回复
可以把整个CFormView窗体都都隐藏掉吗?? 隐藏了就按不了~
if (!m_isActive)
{
ShowWindow(SW_RESTORE);
ShowWindow(SW_SHOWMAXIMIZED);
m_isActive = true;
}
else
{
// Hide Me ~
ShowWindow(SW_SHOWMINIMIZED);
ShowWindow(SW_HIDE);
m_isActive = false;
}
UDX协议 2003-10-15
  • 打赏
  • 举报
回复
写一个枚举函数,把子窗口全部列出来,来后disnabled,这样不就可以吗?
so easy!
harrypotter 2003-10-15
  • 打赏
  • 举报
回复
to zjlgigi(张无忌) :
由于formview上的控件比较多,不希望一个一个设置其为enable或者disable,
还有没有别的方法.
谢谢.
harrypotter 2003-10-15
  • 打赏
  • 举报
回复
主要程序如下所示,
用wizar做一个基于FormView的单文档程序,
新加一个对话框,为该对话框新建一个类CDlg.
在FormView上依次放了三个button,分别为button1,button2,button3;
主要代码为:
void CTryFormViewView::OnButton1()
{
// TODO: Add your control notification handler code here
m_dlg.Create(IDD_DIALOG1);
}

void CTryFormViewView::OnButton2()
{
// TODO: Add your control notification handler code here
EnableWindow(FALSE);
m_dlg.ShowWindow(SW_SHOW);
Sleep(3000);
m_dlg.SendMessage(SW_CLOSE);
EnableWindow(TRUE);
}

void CTryFormViewView::OnButton3()
{
// TODO: Add your control notification handler code here
AfxMessageBox("aaaaa");
}

其中m_dlg 为无模式对话框CDlg的对象;

现在一次按button1,button2,button3

当按了button2后,我把Formview已经disable了,此时应该再按button3没有响应
但是会发现当button2执行结束后,button3所对应的响应函数仍然执行了.

就如同button3的click事件已经放在了消息队列中了.

我要实现当disable formview后,不能click button3,该如何做,由于formview上的控件比较多,
我不希望一一disable控件.由于涉及到整个程序的结构,也不能把无模式对话框改成domodal
请问该如何实现.

谢谢
zjlgigi 2003-10-15
  • 打赏
  • 举报
回复
不知道以下方法行不行得通,把FormView对象作为参数传到 Dialog 之中,当显示Dialog的时候就把FromView的控件Disable掉~ 当Dialog隐藏的时候增加消息处理事件把FormView的控件再Enable.

//调用时
CDialog::CDialog (CFormView* m_cf)
{
mainframe = m_cf;
((CFormView*)mainframe)->SetDisableWindow();
}

//处理隐藏消息函数
{
((CFormView*)mainframe)->SetEnableWindow();
}

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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