C++Builder |
Отправлено: 20.12.2004, 16:00 |
|
Не зарегистрирован
|
Есть код:
//-------------------------------------------------------------------------
OPENFILENAME opflnm;
ZeroMemory(&opflnm, sizeof(OPENFILENAME));
OSVERSIONINFO Ver;
ZeroMemory(&Ver,sizeof(OSVERSIONINFO));
Ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&Ver);
if(Ver.dwMajorVersion < 5)
opflnm.lStructSize = OPENFILENAME_SIZE_VERSION_400;
else
opflnm.lStructSize = sizeof (OPENFILENAME);
char FileBuf[] = {'\0'};
char *Cap = "Открыть файл";
opflnm.hwndOwner = Application->MainForm->Handle;
opflnm.nMaxFile = sizeof(opflnm);
opflnm.lpstrFile = FileBuf;
opflnm.lpstrFilter = "Файлы .txt (*.txt)\0*.txt\0";
opflnm.nFilterIndex = 1;
opflnm.lpstrFileTitle = NULL;
opflnm.nMaxFileTitle = sizeof(Cap);
opflnm.lpstrTitle = Cap;
opflnm.lpstrInitialDir = NULL;
opflnm.lpfnHook = OpenDlgProc;
opflnm.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ENABLEHOOK | OFN_EXPLORER;
GetOpenFileName(&opflnm);
....................................................
UINT CALLBACK OpenDlgProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
if (uiMsg==WM_INITDIALOG)
{
POINT pPnt;
RECT dlgRect,prntRect;
GetWindowRect(hdlg,&dlgRect);
int nWidth = dlgRect.right — dlgRect.left;
int nHeight = dlgRect.bottom — dlgRect.top;
GetWindowRect(Application->MainForm->Handle,&prntRect);
pPnt.x = (prntRect.right — prntRect.left) / 2;
pPnt.y = (prntRect.bottom — prntRect.top) / 2;
ClientToScreen(Application->MainForm->Handle,&pPnt);
pPnt.x -= nWidth / 2;
pPnt.y -= nHeight / 2;
MoveWindow(hdlg,pPnt.x, pPnt.y, nWidth, nHeight, false);
}
return 0;
}
По идее, созданное диалоговое окно открытия файлов должно переместиться в центр главной формы приложения, однако этого не происходит. Оно остается висеть в точке (0,0) в координатах главной формы. При этом, если не указывать флаг OFN_EXPLORER, создаваемое диалоговое окно "старого стиля" прекрасно позиционируется по центру главной формы. В чем может быть проблема с окном шаблона OFN_EXPLORER? |
|
|