![]() |
|
|
![]()
|
|
| nikitos1980 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Банальный вопрос, понимаю, знаю, что поиск рулит (!), но уже полдня не могу отыскать конкретный отет на вопрос: как отловить сообщение сворачивания окна в трей (minimize)
ON_SIZE обработчик WM_SIZE не реагирует на сворачивание (проверял трейсом) ON_SYSCOMMAND вообще молчит и SC_MINIMIZE не отлавливается. Так что же использовать? |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
В трей? может на панель просто?
WM_SHOWWINDOW попробуй -------------------- ![]() |
|||
|
||||
| nikitos1980 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Поробовал
Не отлавливается сообщение
А сворачивать действительно хочу на панель виндоус (просто приложение делаю для использования значка в автозапуске) Добавлено через 8 минут и 43 секунды Сделал. Оловил сообщение WM_SYSCOMMAND в окне-рамке.
Это сообщение отредактировал(а) nikitos1980 - 8.6.2009, 19:34 |
||||
|
|||||
| nikitos1980 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Пождскажите пожалуйста 2 вопроса:
1. как можно определить параметры командной строки в приложении? Я в автозагрузку (в реестр) пишу путь к своему приложению с параметром -x. Как в приложении определить, было ли оно вызвано с этим параметром или без него (клик по иконке пользователем)? 2. Какое сообщение лучше отлавливать, чтобы при старте приложения его сворачивать и удалять с экрана (скорывать)? Например, WM_CREATE или иное? Спасибо |
|||
|
||||
| Peter |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: нет Всего: 1 |
Приложение с WinMain()? Тогда WinAPI-функция
Это сообщение отредактировал(а) Peter - 19.6.2009, 14:19 -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
||||
|
|||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
Если без WinMain, то
Это сообщение отредактировал(а) Cheloveck - 19.6.2009, 15:01 -------------------- ![]() |
|||
|
||||
| nikitos1980 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Peter, LPWSTR GetCommandLine(VOID) помогло!
Спасибо! Это сообщение отредактировал(а) nikitos1980 - 19.6.2009, 16:38 |
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: нет Всего: 1 |
Пожалуйста.
-------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
| nikitos1980 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Подскажите пожалуйста кто знает
В приложении выполняется новый поток, из которого вызывается функция окна (основного потока). Функция вызывается через указатель, переданный новому потоку в параметре LPVOID. По сути, код выполняется, но появляется ошибка в коде при обращении к основному окну.
По сути в коде функции основного потока получаю указатель к разделяемому окну и пишу сообщение в окно вида, производного от CListView |
|||
|
||||
| nikitos1980 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Еще один вопрос: никак не могу найти способ, как открыть файл (вернее, получить его размер), который используется другой программой (открыт другим приложением)? Например, я копирую файл с помощью CopyFile() в другую директорию, сначала получаю его размер:
CFile file(strSomeFileName, CFile::modeNoInherit); // Ошибка CFileException - shareViolation ULONGLONG dSize = file.GetLEngth(); Как открыть такой файл? Это сообщение отредактировал(а) nikitos1980 - 20.6.2009, 15:47 |
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: нет Всего: 1 |
Насколько я помню, из потока нельзя закрыть окно, принадлежащее другому потоку. Может быть, и тут та же ошибка? В общем, справку читать надо.
-------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
| nikitos1980 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Peter, Я и не пытаюсь закрыть окно, я вызываю код в другом потоке...
При вызове CbackupListView* pView = (CbackupListView*)pFrame->m_wndSplitter.GetPane(1, 0) // Именно вызывает ошибку m_wndSplitter.GetPane(1, 0) появляется ошибка Это сообщение отредактировал(а) nikitos1980 - 21.6.2009, 12:21 |
|||
|
||||
| nikitos1980 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Сам отвечу на свой вопрос: при компиляции в режиме Debug появляется ошибка pMap->LookupPermanent(m_hWnd), так как afxMapHWND() возвращает карты [текущего] потока, но в рабочем потоке этих карт нет, т.е. LookupPermanent(m_hWnd) == NULL В режиме Release эта ошибка не появляется Поскажите, как можно открыть файл (CFile file(someFileName, CFile::modeOpen)), открытый другим приложением? Например, я хочу узнать размер видео-файла с помощью CFile::GetLength(), в то время как этот файл открыт видео-плеером. Я получаю ошибку shareViolation. |
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: нет Всего: 1 |
Я не знаю, что это за режим - CFile::modeOpen, т.к. обхожусь без MFC. В WinAPI есть функция CreateFile (думаю, что класс CFile именно ее и вызывает). У той можно выбрать три варианта доступа к файлу: 0, GENERIC_READ или GENERIC_WRITE. Подозреваю, что при создании объекта CFile достаточно будет сменить режим открытия файла - и тогда можно будет узнать его размер. Добавлено через 6 минут и 26 секунд Впрочем, нет. АПИ-функция GetFileLength() требует, чтобы файл был открыт в режиме GENERIC_READ или GENERIC_WRITE. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Модератор: Пожалуйста, один топик - один вопрос.
nikitos1980, уже три разных вопроса в этом топике. Хватит, закрываю тему. Создавай новые топики для разных вопросов. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |