Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters

Reply
 
Thread Tools

невидимый модальный диалог
Old 08.08.2003, 11:11   #1
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default невидимый модальный диалог

как его добиться? т.е. чтобы я его запускал по CDialog:: DoModal, а он не был виден на экране. не надо удивляться, зачем мне такое надо. просто посоветуйте как
спасибо

Old 08.08.2003, 11:54   #2
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

я override - нул WM_PAINT в своем диалоге и вызвал там ShowWindow(SW_HIDE). Больше я этот диалог не видел...
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 08.08.2003, 12:01   #3
nightmare
 
spawn's Avatar
 
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
Default

если ты используешь .net то тебе нечего делать просто надо поставить стиль Transparent = TRUE ... и дело с концом )
__________________
Born in darkness. Sworn to justice.
------------------------------------------------------
http://spawn.grcom.ru
http://www.e-time.ru
http://spawnnnn.deviantart.com/gallery/

Old 08.08.2003, 12:03   #4
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally posted by Agregat
я override - нул WM_PAINT в своем диалоге и вызвал там ShowWindow(SW_HIDE). Больше я этот диалог не видел...
looooooool, класс
ладно, уточню вопрос: как отложить его появление до того момента, когда я сам это закажу (но он должен существовать, т. е. иметь валидный описатель, с самого начала. и должен быть модальным).

Old 08.08.2003, 12:04   #5
nightmare
 
spawn's Avatar
 
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
Default

Quote:
Originally posted by Agregat
я override - нул WM_PAINT в своем диалоге и вызвал там ShowWindow(SW_HIDE). Больше я этот диалог не видел...

не думаю что еффект модал-а может быть получен таким путем ... хотя можно попробовать ...
__________________
Born in darkness. Sworn to justice.
------------------------------------------------------
http://spawn.grcom.ru
http://www.e-time.ru
http://spawnnnn.deviantart.com/gallery/

Old 08.08.2003, 12:05   #6
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally posted by spawn
если ты используешь .net то тебе нечего делать просто надо поставить стиль Transparent = TRUE ... и дело с концом )
пишу под обычный mfc. кстати, а такая прозрачность разве не отнесется только к диалогу, оставив его элементы видимыми?

Old 08.08.2003, 12:08   #7
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

делаешь так.

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;

вот...
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 08.08.2003, 12:09   #8
nightmare
 
spawn's Avatar
 
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
Default

Quote:
пишу под обычный mfc. кстати, а такая прозрачность разве не отнесется только к диалогу, оставив его элементы видимыми?
нет ... прозрачным становиться все ...

если под простой mfc то щас посмотрим ...
__________________
Born in darkness. Sworn to justice.
------------------------------------------------------
http://spawn.grcom.ru
http://www.e-time.ru
http://spawnnnn.deviantart.com/gallery/

Old 08.08.2003, 12:15   #9
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

Quote:
не думаю что еффект модал-а может быть получен таким путем ... хотя можно попробовать ...
не, вроде выходит... кроме одной вещи - он реагирует на нажатие клавиш, но это тоже можно с помощью PreTranslateMessage отловить и обработать.
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 08.08.2003, 12:20   #10
nightmare
 
spawn's Avatar
 
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
Default

да ... интересный результат ... )

если в OnPaint написать ShowWindow(SW_HIDE) получается вот что ...

диалог при каждой перерисовке ... т.е. также после WM_ACTIVATE получает WN_PAINT и пытается перерисоваться ... так как он модальный то при каждом Hide, Show, MouseClick и т.д. он будет пытаться перерисоваться ... а значит он зациклиться и в результате Not Responding ... )

да я прав ... нифига ... никаких отзывов ... со стороны программы ...

все таки думаю тебе следует попробовать не hide-нуть диалог а сделать его Transparent... не помню как это делалось в mfc ... но кажется через CPaintDC это можно устроить ... будет время попробую ...
__________________
Born in darkness. Sworn to justice.
------------------------------------------------------
http://spawn.grcom.ru
http://www.e-time.ru
http://spawnnnn.deviantart.com/gallery/

Old 08.08.2003, 12:25   #11
nightmare
 
spawn's Avatar
 
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
Default

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(0WS_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
намного легче )
__________________
Born in darkness. Sworn to justice.
------------------------------------------------------
http://spawn.grcom.ru
http://www.e-time.ru
http://spawnnnn.deviantart.com/gallery/

Old 08.08.2003, 12:36   #12
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

у меня подобной проблемы не возникло
Я как сделал. У меня диалог аппликасьон. В нем сделан еще один диалог, который собственно и запускается через DoModal(). Метод pаint запускается всего один раз... вот...


следующий код прекрасно работает... правда я не знаю подходит ли он для нужных целей... Через 10 секунд окно появляется и работает как надо
PHP Code:
static UINT MyControllingFunctionLPVOID 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(MyControllingFunctionthis0000);
    } 
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 08.08.2003, 12:41   #13
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

Извиняюсь покорно, сэр, но ваш код не сработал. По крайней мере на моем vc6 с вынь2000 картинка прилагается
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 08.08.2003, 12:43   #14
nightmare
 
spawn's Avatar
 
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
Default

сори моя ошибка ...

но все таки я б предпочел сделать диалог невидимым а не hide-ать его ... не знаю почему но мне не нравиться вариант ShowWindow(SW_HIDE) в OnPaint ... сори ...
__________________
Born in darkness. Sworn to justice.
------------------------------------------------------
http://spawn.grcom.ru
http://www.e-time.ru
http://spawnnnn.deviantart.com/gallery/

Old 08.08.2003, 12:45   #15
nightmare
 
spawn's Avatar
 
Join Date: 05 2003
Location: Russia, Moscow
Age: 47
Posts: 279
Rep Power: 5
Default

Quote:
Originally posted by Agregat
Извиняюсь покорно, сэр, но ваш код не сработал. По крайней мере на моем vc6 с вынь2000 картинка прилагается
PHP Code:
static UINT MyControllingFunctionLPVOID 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(MyControllingFunctionthis0000);
    } 
видимо не все скопировалось

PHP Code:
    else
    {
          
ShowWindow(SW_SHOW);
    }

как минимум
__________________
Born in darkness. Sworn to justice.
------------------------------------------------------
http://spawn.grcom.ru
http://www.e-time.ru
http://spawnnnn.deviantart.com/gallery/
Reply




Реклама:
реклама
Buy text link .

All times are GMT. The time now is 15:28.
Top

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.