【问题标题】:Press Button automatically?自动按下按钮?
【发布时间】:2015-05-06 08:33:05
【问题描述】:

我按了一次按钮。之后我想自动按下按钮。 我试试这段代码。但不工作。按钮变量名没问题。

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();
    }

知道怎么做吗?

【问题讨论】:

    标签: c++ visual-studio-2013 mfc


    【解决方案1】:

    忘记你的 timerCallback 函数

    你需要这个:

    CkTimerDlg的类定义中添加这个方法

    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
    

    您无需致电SetTimerin somefunc

    【讨论】:

    • 先生,谢谢。我在您的代码的帮助下解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2018-10-11
    • 2017-01-18
    • 2016-11-05
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多