模态对话框的实现,以及为什么不能用 SetParent 实现
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】Win32
[
10 瀏覽
0 評論
2 贊
3 踩
]
概要
正文
模态对话框就是:如果当前窗口尚未关闭,父窗口就无法被操作,就像 MessageBox 绑定在某个窗口上面的效果一样,如果不先把 MessageBox 确定掉,就没办法操作背后的窗口。
模态对话框在显示之后,就不能对父窗口进行操作。
非模态对话框在显示之后,还可以对其它窗口进行操作。
实现方法可以参考:https://www.cnblogs.com/zplutor/archive/2011/02/20/1958973.html
总的来说,首先,弹出的窗口在 CreateWindow 的时候就要设置 hParent,然后为了实现“模态”,需要像这样:
EnableWindow(hParent, false); // 此处创建窗口,就像创建一个正常的窗口一样。 EnableWindow(hParent, true); SetForegroundWindow(hParent); // 由于此时 hParent 会最小化,必须将其提到前面
但是为什么不能用 SetParent?我其实不太清楚到底能不能,但是要是直接用的它的话会导致整个窗口直接嵌在父窗口里面,拖不出来的那种,就像控件一样。顺便一说,如果真的用了 SetParent 之后,还要记得此时子窗口的坐标就是相对父窗口了,所以得要 MoveWindow,将子窗口挪到父窗口的能看到的位置。