Создание немодальных диалогов без главного окна
От: Qazwsx  
Дата: 15.03.04 17:45
Оценка:
Хочу сделать следующее: программа при запуске прячется в трей далее в зависимости от выбора пункта меню загружаем соответствующий диалог, сделали что надо, нажали OK и программа опять уходит в трей и там ждёт.

Вопрос как создавать такие немодальные диалоговые окна?

Пробовал так:
BOOL CMyApp::InitInstance()
{
AfxEnableControlContainer();

#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

CMyDlg dlg;
m_pMainWnd = &dlg;

dlg.Create (IDD_MY_DIALOG,NULL);

MSG msg;
BOOL bRet;

while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return FALSE;
}
Вроде работает но мне не очень это нравится. И куда в таком случае попадает сообщение после DispatchMessage? Сразу в Window Proc к диалогу?

Пробовал ещё сделать вот так:

class CMyApp : public CWinApp
{
public:
CMyDialog mydlg;
.........
mydlg.Create(IDD_MY_DIALOG,NULL);

В таком случае цикл обработки сообщений в InitInstance не нужен естественно но в Дебаг компиляции выдаёт ошибку: не может найти ресурс правда когда жму пропустить всё нормально. В релизе таких проблем нет.

Если сделать так
class CMyApp : public CWinApp
{
public:
CMyDialog* mydlg;
.........
а потом mydlg->Create(....) то после этого вызова вообще возникает ошибка доступа к памяти.

Что делать?
Re: Создание немодальных диалогов без главного окна
От: molostov  
Дата: 15.03.04 21:30
Оценка:
Здравствуйте, Qazwsx, Вы писали:

Q>Хочу сделать следующее: программа при запуске прячется в трей далее в зависимости от выбора пункта меню загружаем соответствующий диалог, сделали что надо, нажали OK и программа опять уходит в трей и там ждёт.


Q>Вопрос как создавать такие немодальные диалоговые окна?


Главное окно тут как раз и надо. Но оно будет невидимо, т.е. в InitInstance надо сделать m_pMainWnd->ShowWindow(SW_HIDE). Кстати, проект можно делать без поддержки документ-вид.
Дальше во фрейме надо организовать вывод иконки в трей и обработку нажатий мышки и команд меню.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.