Help: How to make a DLL's window show modal in a MFC app?
Mao Zhihong -- maozhihong@hotmail.com
Friday, December 06, 1996
Environment: VC++ 1.52, VC++ 4.0 with patch, Win3.1, Win 95
Dear MFC-Acers,
I need help! In my current project, we mixed MFC's codes with Delphi's,
that is, we make some DLLs by Delphi, and then call them from MFC app.
When I try to make a window(dialog) from DLL show modal, it doesn't work
ok: the DLL's windows can not always stay on top, if I click on my app's
main window, it will overlap the dll's dialog, but this time the main
window is inactive. In Win 95, the DLL's window and my mainframe both
appear in the task bar.
my code is like this :
...
extern "C" void ShowDllDialog();
...
void CMyView::OnShowDialog()
{
::ShowDllDialog();
//...
}
...
I tried to set DLL's dialog's parent to my main window, but this time,
both two windows refuse any input!
I peeked the windows information by SPY++, and found it nothing differ
from a MFC's dialog box.
Can any body help me?
best reguards
Robert Mao
Mao Zhihong -- maozhihong@hotmail.com
Friday, December 06, 1996
Mao Zhihong wrote:
>
> Environment: VC++ 1.52, VC++ 4.0 with patch, Win3.1, Win 95
>
> Dear MFC-Acers,
> I need help! In my current project, we mixed MFC's codes with Delphi's,
> that is, we make some DLLs by Delphi, and then call them from MFC app.
> When I try to make a window(dialog) from DLL show modal, it doesn't work
> ok: the DLL's windows can not always stay on top, if I click on my app's
> main window, it will overlap the dll's dialog, but this time the main
> window is inactive. In Win 95, the DLL's window and my mainframe both
> appear in the task bar.
> my code is like this :
>
> ...
> extern "C" void ShowDllDialog();
> ...
> void CMyView::OnShowDialog()
> {
> ::ShowDllDialog();
> //...
> }
> ...
>
> I tried to set DLL's dialog's parent to my main window, but this time,
> both two windows refuse any input!
> I peeked the windows information by SPY++, and found it nothing differ
> from a MFC's dialog box.
> Can any body help me?
>
> best reguards
> Robert Mao
Dear friends,
I get the answer myself, maybe it is not the best, but it do
effective!
firstly, we should know:
1. if you want to make a Dialog in DLL show modal, you MUST pass a
parent
for it, or it can not show modal as you want! (there is a tech notes
in
MSDN talk about this)
2. When a window show modal, its parent automatically set to toplevel
window, though you just passed a parent window handle for it!
But sometimes, maybe you can not pass a handle for the DLL, how could
u
do this smoothly? (that's just my problem, I still don't know how to
set a HWND as a TForm's parent. :( )
ok, the following is my way, it is dirty but really work!
/* file : mainfrm.h */
...
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_WINDOWPOSCHANGING()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
...
void CMainFrame::EnableZorder(BOOL b)
{
m_bZorderCanChg = b;
}
void CMainFrame::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
CFrameWnd::OnWindowPosChanging(lpwndpos);
if (!m_bZorderCanChg) {
lpwndpos->flags |= SWP_NOZORDER;
}
}
...
/* file : where you call up the DLL's dialog */
...
extern "C" void ShowDllDialog();
...
void CMyView::OnShowDialog()
{
CMainFrame *pMain = (CMainFrame*)AfxGetMainWnd();
pMain->EnableZorder(FALSE);
::ShowDllDialog(); // rem: here will pop a modal dialog
pMain->EnableZorder(TRUE);
//...
}
...
Hope this will be helpful for u!
Best Reguards
Mao Zhihong
--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Mao Zhihong ( Robert Mao ) DreamyRainbow Software Studio
Voc/Fax : 86-25-5408086
E-Mail : maozhihong@hotmail.com mao@seu.edu.cn
URL : http://seic3.seu.edu.cn/~mao
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
| Вернуться в корень Архива
|