Кто сказал "не могу"?
Попробуйте:
Это для 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, чтобы использовать это, по крайней мере, вы захотите, если хотите открыть / сохранить диалоги.
Я экспериментировал с просмотром кодов уведомлений и hwndFromНМГДР, то решил, что это так же эффективно, и гораздо проще, а не так.Если вы действительно хотите быть очень конкретным, попросите FindWindow найти уникальный заголовок (заголовок), который вы даете тому окну, которое хотите найти.
Это срабатывает до того, как окно сообщений отображается на экране, поэтому, если вы установитеглобальный флаг, который указывает, когда ваш код выполняет действие, и ищет уникальную подпись; вы должны быть уверены, что выполняемые вами действия будут происходить только один раз (вероятно, будет несколько уведомителей).Я не изучал это подробно, но мне удалось заставить CreateWindow поместить поле редактирования в диалоговое окно сообщения.Это выглядело так неуместно, как ухо крысы, привитое к позвоночнику клонированной свиньи, но это работает.Делать так можно гораздо проще, чем кататься самостоятельно.
Ворона.
РЕДАКТИРОВАТЬ: Небольшое исправление для решения проблемы, поднятой Раймондом Ченом.Убедитесь, что родительские дескрипторы согласуются во всем, и это должно работать нормально.Это для меня, даже с двумя экземплярами одной и той же программы ...