我正在努力做到這一點,當一個訊息框打開時,另一個訊息框會在幾秒鐘后打開,而無需任何用戶輸入(按 OK 按鈕)。我希望舊的保持開放,但要出現新的。我知道這使用了 SetTimer() 和 WM_TIMER 函式,但我該怎么做呢?我已經研究過如何做到這一點,但似乎沒有任何效果。
#include <iostream>
#include <random>
#include <Windows.h>
#include <winternl.h>
#include "Uh_Oh.h"
#include <string>
#include "resource.h"
using namespace std;
void _MessageBox()
{
HWND HWND1;
MessageBox(HWND1, TEXT("Message"), TEXT("MsgBox"), MB_ICONWARNING | MB_OK);
SetTimer(HWND1,
TIMER1,
2000,
(TIMERPROC)NULL);
case WM_TIMER:
switch (wParam)
{
case TIMER1:
MessageBox(NULL, TEXT("Message 2"), TEXT("MsgBox 2"), MB_ICONWARNING | MB_OK);
return 0;
}
}
}
int main()
{
ShowWindow(::GetConsoleWindow(), SW_HIDE);
_MessageBox();
}
uj5u.com熱心網友回復:
您正在傳遞一個未初始化 HWND的 to MessageBox()。
另外,MessageBox()它是一個阻塞函式,在對話框關閉之前它不會退出,所以你需要在呼叫之前MessageBox()創建計時器(除非你使用SetWindowsHookEx()或SetWinEventHook()鉤住對話框的創建)。
此外,您處理WM_TIMER訊息的語法完全是錯誤的。
MessageBox()顯示一個模態對話框并運行它自己的訊息回圈,因此您根本不需要WM_TIMER手動處理。您可以為計時器分配回呼,并讓模態回圈為您分派回呼事件。
嘗試更多類似的東西:
#include <Windows.h>
void CALLBACK TimerProc(HWND, UINT, UINT_PTR, DWORD)
{
MessageBox(NULL, TEXT("Message 2"), TEXT("MsgBox 2"), MB_ICONWARNING | MB_OK);
}
void _MessageBox()
{
UINT timer = SetTimer(NULL, 0, 2000, TimerProc);
if (timer) {
MessageBox(NULL, TEXT("Message"), TEXT("MsgBox"), MB_ICONWARNING | MB_OK);
KillTimer(NULL, timer);
}
}
int main()
{
ShowWindow(GetConsoleWindow(), SW_HIDE);
_MessageBox();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/437761.html
