C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Позиционирование диалогового окна открытия файлов
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?

Вернуться в Вопросы программирования в C++Builder