dailog-base приложение под MFC

marizha

как его "официально" создать, а то созданные мною не зачищаются из taskmanager-а после закрытия, поэтому я в OnClose диалога вставляю:

theApp.m_pMainWnd->DestroyWindow;

что обычно "убирает" мой процесс из taskmanager-а, но не всегда...а ExitInstance вроде бы не советуется запускать напрямую....

shlyumper

попробуй в OnClose вставить delete this;

marizha

? :P eto nichego ne daet - lish error...

yuda

> как его "официально" создать
что значит "официально"?
Генерю AppWizard'ом и все нормально

kokoc88

Покажи более детально, что там у тебя происходит. С кусками кода.

marizha

u menya net Wizarda dlya sozdainiya dialog-based prilozheniya!
a pod "официально" ya podrazumeval sozdanie rabochei progi (vozmozhno s pomosh'u Wizarda) po vseobshe prinyatim pravilam dlya takogo roda prog...
(t.e. kak eto sozdaut VSE...)

marizha

1)sozdau s pomosh'u ClassWizarda class-naslednik ot CDialog
2)virezau vse napisannoe Wizardom v InitInstance a takzhe izbavlyaus' ot Doc i View (kotorih ya poka ne znau :P) -no poslednee ne vsegda ...
3) vstavlyau v InitInstance CMyDialog *pD=new CMyDialog; pD->Create(IDD_DIALOG1); m_pMainWnd=pD; ShowWindow i update ne trogal...
4)s OnClose delau opisannoe ranee...

kokoc88

Нету визарда для Dialog Based? Откуда ты откопал такой Visual Studio?
Так, как ты делаешь, нельзя. В InitInstance напиши :


CTestDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal;
if (nResponse == IDOK)
{
}
else
if (nResponse == IDCANCEL)
{
}
return FALSE;

yuda

Как делает микрософт (просто и со вкусом):

BOOL CApp::InitInstance
{
AfxEnableControlContainer;
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFLL
Enable3dControls; // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic; // Call this when linking to MFC statically
#endif
CAppDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal;
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}


ВСЕ!
Я долго ржал, когда увидел это в первый раз.

kokoc88

Ржал-то почему?

yuda

> u menya net Wizarda dlya sozdainiya dialog-based prilozheniya!
В 6-м VC это в первом же окошечке AppWiz (выбор между "Single document", "Multiple document" и "Dialog based"). Ежли у тебя не так, то переставь VC.

marizha

P u menya chego-to so zreniem... thx
Оставить комментарий
Имя или ник:
Комментарий: