MSVC++ въпрос...

7 отговора 360 прегледа
#1

MSVC++ въпрос...

Искам да изведа съобщение подобно на MessageBox, което след няколко секунди да изчезне (без бутони). Рових в МSDN за пример, но неможах да намеря. Къде мога да намеря пример или накакви ориентира как се прави това? Предварително благодаря.

Отговор
в отговор на lNC #2

Re: MSVC++ въпрос...

Можеш просто да изведеш един модален диалог, сетваш му един таймер и след няколко секунди извикваш CDialog::OnOK или CDialog::OnCancel.
За да не се затваря при натискане на enter или eskape или ALT+F4 предефинираш функциите OnOK и OnCancel и ги оставяш празни.

Pozdravi ot Bourgas.
Отговор
в отговор на pbourgas #3

CDialog::EndDialog(int)

Ако предефинира OnOK() и OnCancel() ще е по-разумно да извика EndDialog(). Иначе диалога няма да се затвори ;)

-
пуша си в каруцата
Отговор
в отговор на lNC #4

Re: MSVC++ въпрос...

HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
HWND hDlg = CreateDialog(....);
WaitForSingleObject(hEevent, desired_time);
EndDialog(hDlg, 0);


Я вышел им наперерез...
Отговор
в отговор на MиГ #5

хм..

с EndDialog() се унищожава модален диалог (тези с DialogBox), за немодалните диалози (създадени с CreateDialog()) трябва да се ползва DestroyWindow()

целият този номер с event-a е по-сложен вариант на простичкото Sleep(desired_time )

при положение (както е написано), че няма message loop - WaitForSingleObject веднага следва CreateDialog - това значи че ако покрием диалога с друг прозорец и след това отместим другия прозорец, диалогът няма да се прерисува... лоша работа.

Отговор
в отговор на Cпиpo #6

Re: CDialog::EndDialog(int)

Това което казах е да направи следното извикване:

CDialog::OnOK(); или CDialog::OnCancel();

а не OnOK(); или OnCancel();

Съгласи се, че има разлика.

Pozdravi ot Bourgas.
Отговор
в отговор на _ #7

Re: хм..

Това е така, разбира се :)
Какво се случва, когато не гледаш mdsn lib-а
По-късно ще напиша нещо вярно :)


Я вышел им наперерез...
Отговор
в отговор на MиГ #8

Re: На всички...

Благодаря много. Ориентирах се в общи линии
и оставих този вариант:

m_dWaitBox.m_swaitmess="Please wait for ...";

m_dWaitBox.Create(IDD_WAITBOX); //DoModaless();
m_dWaitBox.ShowWindow(SW_SHOWNORMAL);
m_dWaitBox.UpdateWindow();
.
// {test units}
.
Sleep(2200);
.
if(m_dWaitBox )
{
m_dWaitBox.DestroyWindow();

}

Отговор