 |
невидимый модальный диалог |
 |
08.08.2003, 11:11
|
#1
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
невидимый модальный диалог
как его добиться? т.е. чтобы я его запускал по CDialog:: DoModal, а он не был виден на экране. не надо удивляться, зачем мне такое  надо. просто посоветуйте как 
спасибо
|
|
|
08.08.2003, 11:54
|
#2
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
я override - нул WM_PAINT в своем диалоге и вызвал там ShowWindow(SW_HIDE). Больше я этот диалог не видел...
|
|
|
08.08.2003, 12:01
|
#3
|
nightmare
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
|
если ты используешь .net то тебе нечего делать просто надо поставить стиль Transparent = TRUE ... и дело с концом  )
|
|
|
08.08.2003, 12:03
|
#4
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally posted by Agregat
я override - нул WM_PAINT в своем диалоге и вызвал там ShowWindow(SW_HIDE). Больше я этот диалог не видел...
|
looooooool, класс 
ладно, уточню вопрос: как отложить его появление до того момента, когда я сам это закажу (но он должен существовать, т. е. иметь валидный описатель, с самого начала. и должен быть модальным).
|
|
|
08.08.2003, 12:04
|
#5
|
nightmare
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
|
Quote:
Originally posted by Agregat
я override - нул WM_PAINT в своем диалоге и вызвал там ShowWindow(SW_HIDE). Больше я этот диалог не видел...
|
не думаю что еффект модал-а может быть получен таким путем ... хотя можно попробовать ...
|
|
|
08.08.2003, 12:05
|
#6
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally posted by spawn
если ты используешь .net то тебе нечего делать просто надо поставить стиль Transparent = TRUE ... и дело с концом )
|
пишу под обычный mfc. кстати, а такая прозрачность разве не отнесется только к диалогу, оставив его элементы видимыми?
|
|
|
08.08.2003, 12:08
|
#7
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
делаешь так.
PHP Code:
CTestDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
if (m_bNotToShow)
ShowWindow(SW_HIDE);
}
А вот как ты его будешь показывать, когда тебе это понадобится - это уже сам решай
1. сделать здесь else ShowWindow(SW_SHOW), а откуда-то изменить эту переменную.
2. Изменить эту переменную где-то снаружи/другой функции и вызвать там же ShowWindow(SW_SHOW).
Да, в конструкторе или в переезднутой функции DoModal()
m_bNotToShow = true;
вот...
|
|
|
08.08.2003, 12:09
|
#8
|
nightmare
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
|
Quote:
пишу под обычный mfc. кстати, а такая прозрачность разве не отнесется только к диалогу, оставив его элементы видимыми?
|
нет ... прозрачным становиться все ...
если под простой mfc то щас посмотрим ...
|
|
|
08.08.2003, 12:15
|
#9
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
Quote:
не думаю что еффект модал-а может быть получен таким путем ... хотя можно попробовать ...
|
не, вроде выходит... кроме одной вещи - он реагирует на нажатие клавиш, но это тоже можно с помощью PreTranslateMessage отловить и обработать.
|
|
|
08.08.2003, 12:20
|
#10
|
nightmare
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
|
да ... интересный результат ...  )
если в OnPaint написать ShowWindow(SW_HIDE) получается вот что ...
диалог при каждой перерисовке ... т.е. также после WM_ACTIVATE получает WN_PAINT и пытается перерисоваться ... так как он модальный то при каждом Hide, Show, MouseClick и т.д. он будет пытаться перерисоваться ... а значит он зациклиться и в результате Not Responding ...  )
да я прав ... нифига ... никаких отзывов ... со стороны программы ...
все таки думаю тебе следует попробовать не hide-нуть диалог а сделать его Transparent... не помню как это делалось в mfc ... но кажется через CPaintDC это можно устроить ... будет время попробую ...
|
|
|
 |
|
 |
08.08.2003, 12:25
|
#11
|
nightmare
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
|
PHP Code:
MFC Library Reference
CWnd::ModifyStyleExSee Also
CWnd Overview | Class Members | Hierarchy Chart | CWnd::ModifyStyle | CreateWindowEx
Call this member function to modify a window's extended style.
BOOL ModifyStyleEx(
DWORD dwRemove,
DWORD dwAdd,
UINT nFlags = 0
);
Parameters
dwRemove
Specifies extended styles to be removed during style modification.
dwAdd
Specifies extended styles to be added during style modification.
nFlags
Flags to be passed to SetWindowPos, or zero if SetWindowPos should not be called. The default is zero. See the Remarks section for a list of preset flags.
Return Value
Nonzero if style was successfully modified; otherwise, 0.
Remarks
Styles to be added or removed can be combined by using the bitwise OR (|) operator. See the topics Extended Window Styles in this book and CreateWindowEx in the Platform SDK for information about the available extended styles
If nFlags is nonzero, ModifyStyleEx calls the Windows API function SetWindowPos and redraws the window by combining nFlags with the following four preset flags:
SWP_NOSIZE Retains the current size.
SWP_NOMOVE Retains the current position.
SWP_NOZORDER Retains the current Z order.
SWP_NOACTIVATE Does not activate the window.
To modify windows using regular window styles, see ModifyStyle.
Example
// This example would make the dialog box transparent by
// changing the dialog window's extended styles.
int CMyDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
ModifyStyleEx(0, WS_EX_TRANSPARENT);
return 0;
}
See Also
CWnd Overview | Class Members | Hierarchy Chart | CWnd::ModifyStyle | CreateWindowEx
--------------------------------------------------------------------------------
Send feedback to Microsoft
© 2001 Microsoft Corporation. All rights reserved.
намного легче  )
|
|
|
 |
08.08.2003, 12:36
|
#12
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
у меня подобной проблемы не возникло 
Я как сделал. У меня диалог аппликасьон. В нем сделан еще один диалог, который собственно и запускается через DoModal(). Метод pаint запускается всего один раз... вот...
следующий код прекрасно работает... правда я не знаю подходит ли он для нужных целей...  Через 10 секунд окно появляется и работает как надо
PHP Code:
static UINT MyControllingFunction( LPVOID pParam)
{
CTestDlg * pDlg = (CTestDlg *) pParam;
Sleep(10000);
pDlg->m_bShow = false;
pDlg->ShowWindow(SW_SHOW);
return 0;
}
void CTestDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
if (m_bShow)
{
ShowWindow(SW_HIDE);
AfxBeginThread(MyControllingFunction, this, 0, 0, 0, 0);
}
|
|
|
08.08.2003, 12:41
|
#13
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
Извиняюсь покорно, сэр, но ваш код не сработал. По крайней мере на моем vc6 с вынь2000  картинка прилагается
|
|
|
08.08.2003, 12:43
|
#14
|
nightmare
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
|
сори моя ошибка ...
но все таки я б предпочел сделать диалог невидимым а не hide-ать его ... не знаю почему но мне не нравиться вариант ShowWindow(SW_HIDE) в OnPaint ... сори ...
|
|
|
08.08.2003, 12:45
|
#15
|
nightmare
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
|
Quote:
Originally posted by Agregat
Извиняюсь покорно, сэр, но ваш код не сработал. По крайней мере на моем vc6 с вынь2000 картинка прилагается
|
PHP Code:
static UINT MyControllingFunction( LPVOID pParam)
{
CTestDlg * pDlg = (CTestDlg *) pParam;
Sleep(10000);
pDlg->m_bShow = false;
pDlg->RedrawWindow();
return 0;
}
void CTestDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
if (m_bShow)
{
ShowWindow(SW_HIDE);
AfxBeginThread(MyControllingFunction, this, 0, 0, 0, 0);
}
видимо не все скопировалось
PHP Code:
else
{
ShowWindow(SW_SHOW);
}
}
как минимум
|
|
|
All times are GMT. The time now is 15:28. |
|
|