С++ (нажмите кнопку 1, покажите растровое изображение "P", 2 секунды, скройте растровое изображение "P")

125
13

Я использую 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);
}

спросил(а) 2021-01-25T14:55:37+03:00 4 месяца, 4 недели назад
1
Решение
107

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

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

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

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

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

ответил(а) 2021-01-25T14:55:37+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема