谁说“不能”?
试试这个:
这是用于 Win32 API,用 C 编写的。根据需要翻译它...
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 在消息框对话框上放置一个编辑框。它看起来就像将老鼠的耳朵移植到克隆猪的脊椎上一样不合适,但它确实有效。以这种方式做事可能比自己动手要容易得多。
乌鸦。
编辑:处理 Raymond Chen 提出的问题的小修正。确保父句柄始终一致,这应该可以正常工作。它对我有用,即使是同一个程序的两个实例......