自动按下按钮?
Press Button automatically?
我按了一次按钮。之后我想自动按下按钮。
我试试这段代码。但没有工作。按钮变量名可以。
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
的 class 定义中添加此方法
void OnTimer(UINT nIDEvent);
将此方法添加到 CkTimerDlg
class:
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
。
我按了一次按钮。之后我想自动按下按钮。 我试试这段代码。但没有工作。按钮变量名可以。
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
的 class 定义中添加此方法
void OnTimer(UINT nIDEvent);
将此方法添加到 CkTimerDlg
class:
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
。