C++(按下按钮1,显示位图"P",2秒,隐藏位图"P")

C++ (press button 1, show bitmap "P", 2sec, hide bitmap "P")

本文关键字:位图 隐藏 2秒 显示 按钮 C++      更新时间:2023-10-16

我正在使用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);
}

我也尝试过这些,但它在 CALLBACK 中强调了"IDC_P",并说它类型"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);
}

你可以试试:

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

但这会使您的应用程序停止,直到 2 秒结束。

您也可以尝试使用 AfxBeginThreadCreateThread 创建一个线程来执行这对您来说,因此它不会停止您的应用程序。

但我认为最可行的选择是使用 Windows 计时器,就像您在示例中所做的那样,并在窗口过程中处理WM_TIMER消息,并不完全精通如何在 MFC 中执行此操作,但我希望这篇文章至少对您有所帮助。