Win-API MDI несколько вопросов

208
15 декабря 2016, 16:06

Здравствуйте.

Надо написать приложение на WinAPI MDI окна. Есть 2 вопроса:

  1. Каким методом правильно вычислить активное окно? (Пробовал и WM_SETFOCUS, и WM_MDIACTIVATE, в теле через через WM_MDIGETACTIVE пытался найти активное окно, но если окна 2, то при переключении видится 2 активных.)

  2. Как узнать, был ли изменен файл, который я открыл? Есть ли в OpenFileName или в структуре MDI флаги, отвечающие на такое требование?

Спасибо заранее за ответы.

Answer 1

1) Возвращает HWND окна, в котором пользователь в данный момент работает.

HWND WINAPI GetForegroundWindow(void);

http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms633505(v=vs.85).aspx

Функция GetActiveWindow извлекает оконный дескриптор активного окна, связанного с потоком, который вызывает функцию.

HWND GetActiveWindow(VOID)

http://www.firststeps.ru/mfc/winapi/keyb/r.php?26

2) "Был ли изменён" - относительно чего? Это известоно только Вашей программе. Скорее всего можно получить дату последнего изменения и сравнить с сохранённой последней датой в Вашей программе.

BOOL WINAPI GetFileTime(
  _In_       HANDLE hFile,
  _Out_opt_  LPFILETIME lpCreationTime,    // время создания файла
  _Out_opt_  LPFILETIME lpLastAccessTime,  // время последнего обращения к файлу
  _Out_opt_  LPFILETIME lpLastWriteTime    // время последней модификации
);

http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms633505(v=vs.85).aspx

Есть вариант хранить хэш файла в программе, тогда всё очень просто проверяется. http://stackoverflow.com/questions/1220046/how-to-get-the-md5-hash-of-a-file-in-c

READ ALSO
Не удаляется объект из памяти

Не удаляется объект из памяти

Вспоминаю C++, используя Qt

202
Односвязный список

Односвязный список

Всем добра

227
Приведение map к map

Приведение map к map

Как привести bs к unordered_map<int, shared_ptr<A> >?

179