C ++ (нажмите кнопку 1, показать растровое изображение «P», 2 секунды, скрыть растровое изображение «P»)

Я использую C ++, и я хочу сделать это в диалоговом окне.

Нажмите кнопку 1, покажите растровое изображение «P», подождите 2 секунды, скройте растровое изображение «P», нажмите кнопку 1 еще раз …..

void CPreparationDlg::OnBnClickedButton1()
{
GetDlgItem(IDC_P)->ShowWindow(SW_SHOW);
SetTimer(0, 2000, NULL);
GetDlgItem(IDC_P)->ShowWindow(SW_HIDE);
}

В этом диалоговом окне у меня есть 4 кнопки и 4 разных изображения соответственно.
Кнопки 1,2,3,4, изображения IDC_P, IDC_L, IDC_E, IDC_K.

!!!!!
После того, как я попробовал этот код для кнопки 1, растровое изображение не может быть показано. Я могу только показывать, но не могу скрыть.

void CPreparationDlg::OnBnClickedButton1()
{
GetDlgItem(IDC_P)->ShowWindow(SW_SHOW);
}

void CPreparationDlg::OnBnClickedButton2()
{
GetDlgItem(IDC_L)->ShowWindow(SW_SHOW);
}void CPreparationDlg::OnBnClickedButton3()
{
GetDlgItem(IDC_E)->ShowWindow(SW_SHOW);
}void CPreparationDlg::OnBnClickedButton4()
{
GetDlgItem(IDC_K)->ShowWindow(SW_SHOW);
}

Я также попробовал это, но это подчеркивает «IDC_P» в CALLBACK, и сказал это Аргумент типа «int» несовместим с параметром типа HWND

void CPreparationDlg::OnBnClickedButton1()
{
GetDlgItem(IDC_P)->ShowWindow(SW_SHOW);
UINT TimerId = SetTimer(0, 2000, &TimerProc);
}
VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)
{

GetDlgItem(**IDC_P**)->ShowWindow(SW_HIDE);
}

0

Решение

Вы можете попробовать:

void CPreparationDlg::OnBnClickedButton1()
{
GetDlgItem(IDC_P)->ShowWindow(SW_SHOW);
Sleep(2000);
GetDlgItem(IDC_P)->ShowWindow(SW_HIDE);
}

Но это остановит ваше приложение, пока не истечут 2 секунды.

Вы также можете попробовать использовать AfxBeginThread, или же CreateThread создать поток, чтобы сделать
это для вас, так что это не останавливает ваше приложение.

Но я думаю, что наиболее жизнеспособным вариантом было бы использовать таймер Windows, как у вас в вашем примере, и обрабатывать WM_TIMER сообщения в оконной процедуре, не совсем хорошо разбирающиеся в том, как вы поступите с этим в MFC, но я надеюсь, что этот пост по крайней мере помог вам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]