首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

如何限制MDI子窗口不能移出父窗口(完全在父窗口内)

2012-02-15 
怎么限制MDI子窗口不能移出父窗口(完全在父窗口内)如题..完全在父窗口内[解决办法]难道现在你的MDI子窗口

怎么限制MDI子窗口不能移出父窗口(完全在父窗口内)
如题..完全在父窗口内

[解决办法]
难道现在你的MDI子窗口可以移出父窗口??
[解决办法]
用代码控制比较方便!
[解决办法]
如果真的是MDI子窗口的话,应该不可能移出其父窗口的。。。
[解决办法]
MDI子窗体移不出父窗体的
[解决办法]
据说可以拦截子窗体的OnMove事件,你再搜一下相关的内容。
[解决办法]
重载子窗体的WndProc,拦截WM_MOVING消息并作适当处理。以下例子假设Form2为子窗体,在Unit2中:
.h中:

C/C++ code
protocted:    void __fastcall WndProc(TMessage &Msg);
[解决办法]
探讨
重载子窗体的WndProc,拦截WM_MOVING消息并作适当处理。以下例子假设Form2为子窗体,在Unit2中:
.h中:

C/C++ code
protocted:
void __fastcall WndProc(TMessage &Msg);

.cpp中:

C/C++ code
void __fastcall TForm2::WndProc(TMe……

[解决办法]
大小没有失控。因为只响应WM_MOVING消息。试过你就知道了。
[解决办法]
原来是我关闭了“拖动窗口时显示窗口内容”。如果打开这个选项,会有改变窗体大小的现象,重新修改一下:
C/C++ code
//---------------------------------------void __fastcall TForm2::WndProc(TMessage &Msg){    if (Msg.Msg == WM_MOVING)    {        LPRECT lpRect = (LPRECT)Msg.LParam;        // Application->MainForm->Caption = String().sprintf("%d,%d", lpRect->left, lpRect->top);        TRect rctLimit = Application->MainForm->ClientRect;        TPoint pt(rctLimit.Left, rctLimit.Top);        ::ClientToScreen(Application->MainForm->Handle, &pt);        if (lpRect->left < pt.x) lpRect->left = pt.x + 4;        if (lpRect->top < pt.y) lpRect->top = pt.y + 4;        if (lpRect->right > pt.x + rctLimit.Width())            lpRect->left = pt.x + rctLimit.Width() - Width - 4;        if (lpRect->bottom > pt.y + rctLimit.Height())            lpRect->top = pt.y + rctLimit.Height() - Height - 4;        lpRect->right = lpRect->left + Width;        lpRect->bottom = lpRect->top + Height;    }    TForm::WndProc(Msg);}
[解决办法]
哈哈,自从遇上妖哥,这BCB就变得简单多了!

热点排行