自动按按钮

Press Button automatically?

本文关键字:按钮      更新时间:2023-10-16

i一次按下按钮。之后,我想自动按按钮。我尝试此代码。但不起作用。按钮变量名称还可以。

VOID CALLBACK timerCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
    {
        CkTimerDlg *box = (CkTimerDlg *)AfxGetMainWnd();
        CString test = _T("Button Not Clicked");
        box->testBox1.AddString(test);
        HWND hwdButton = ::GetDlgItem(box->ok, IDOK);
        ::PostMessage(box->ok , WM_COMMAND, MAKELONG(IDOK, BN_CLICKED), (LPARAM)
    hwdButton);
    }
    void SomeFunc()
    {
        SetTimer(NULL, 1, 1000, timerCallback);
        /*MSG msg;
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }*/
    }

    void CkTimerDlg::OnBnClickedOk()
    {
        CString button = _T("Button Clicked");
        testBox1.AddString(button);
        SomeFunc();
    }

任何想法如何做?

忘记您的timerCallback功能

您需要此:

CkTimerDlg的类定义中,添加此Méthod

void OnTimer(UINT nIDEvent);

将此方法添加到CkTimerDlg类:

void CTESTDLGDlg::OnTimer(UINT nIDEvent) 
{
    OnBnClickedOk();
    CDialog::OnTimer(nIDEvent);
}

CkTimerDlg的消息映射中:

BEGIN_MESSAGE_MAP(CTESTDLGDlg, CDialog)
    //{{AFX_MSG_MAP(CTESTDLGDlg)
    ...
    ON_WM_TIMER()   // <-- add this
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

CkTimerDlg::OnInitDialog中添加:

SetTimer(1,2000, NULL);   // will call OnTimer after 2000 milliseconds

您不需要在somefunc中致电SetTimer