Winforms-如何让对话框显示在 MainForm 的中心?这与基于普通窗口默认设置相反,后者将它们显示在屏幕的中心。在我的例子中,我有一个小的
Winforms-如何使对话框显示在 MainForm 的中心?这与基于普通窗口默认设置(将对话框显示在屏幕中心)相反。
在我的例子中,我有一个小的主窗体,例如,它可能被放置在一个角落里,MessageBox 弹出窗口显示在看似很远的地方。
这是用 C 语言编写的 Win32 API。请根据需要进行翻译...
case WM_NOTIFY:{
HWND X=FindWindow("#32770",NULL);
if(GetParent(X)==H_frame){int Px,Py,Sx,Sy; RECT R1,R2;
GetWindowRect(hwnd,&R1); GetWindowRect(X,&R2);
Sx=R2.right-R2.left,Px=R1.left+(R1.right-R1.left)/2-Sx/2;
Sy=R2.bottom-R2.top,Py=R1.top+(R1.bottom-R1.top)/2-Sy/2;
MoveWindow(X,Px,Py,Sx,Sy,1);
}
} break;
将其添加到 WndProc 代码中...您可以根据需要设置位置,在本例中它只是位于主程序窗口的中心。它将对任何消息框、文件打开/保存对话框以及可能的一些其他本机控件执行此操作。我不确定,但我认为您可能需要包含 COMMCTRL 或 COMMDLG 才能使用它,至少,如果您想要打开/保存对话框,您会这样做。
我尝试查看 NMHDR 的通知代码和 hwndFrom,然后决定不这样做同样有效,而且容易得多。如果您真的想非常具体,请告诉 FindWindow 查找您为要查找的窗口提供的唯一标题(标题)。
这会在消息框绘制到屏幕上之前触发,因此如果您设置一个全局标志来指示代码何时完成操作,并寻找唯一的标题,则请确保您采取的操作只会发生一次(可能会有多个通知程序)。我还没有详细探讨过这个问题,但我设法让 CreateWindow 在消息框对话框中放置一个编辑框/它看起来像老鼠的耳朵嫁接到克隆猪的脊椎上一样不合适,但它确实有效。以这种方式做事可能比自己动手容易得多。
乌鸦。
编辑:进行小幅修正以确保处理正确的窗口。确保父句柄始终一致,这样应该可以正常工作。对我来说,即使使用同一程序的两个实例,它也能正常工作...