gpt4 book ai didi

c - Windows上C语言的定时器

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:42 26 4
gpt4 key购买 nike

我正在制作一个测验程序。显示一个问题并启动计时器。用户必须在 30 秒内回答问题。如果他在 30 秒内没有回答问题,则计时器结束并显示下一个问题。问题是我遇到的所有 TIMER 程序都停止了程序,即用户将无法在该计时器期间输入他的答案

最佳答案

执行此操作的正确方法是使用线程或 0.1 秒休眠。

您应该从一些教程中获得一个小的 Windows 应用程序(您通过 WinMain() 而不是 main() 识别典型的 Windows 应用程序示例)。

然后您可以添加这些函数:

SetTimerKillTimer

这是一个完整的工作示例:它创建一个带有文本输入的窗口,为其提供焦点并将计时器设置为 1 秒。当计时器到期时,它从文本输入中获取文本并将其显示在对话框中。

#include <windows.h>

HWND hwndMain = 0;
HWND hwndEdit = 0;
#define idTimer 123
VOID CALLBACK TimerProc(HWND w, UINT msg, UINT_PTR e, DWORD t) {
Beep(2000, 10);
KillTimer(hwndMain, idTimer);
char tmp[100];
GetWindowText(hwndEdit, tmp, 100);
MessageBox(0, tmp, "you entered:", 0);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM w, LPARAM l)
{
#define id_note 50

switch(msg) {
case WM_CREATE:
hwndMain = hwnd;
hwndEdit = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT",
"",WS_CHILD|WS_VISIBLE,
0,0,80,20,hwnd,(HMENU)id_note,GetModuleHandle(0), 0);
SetFocus(hwndEdit);
SetTimer(hwndMain, idTimer, 1000, TimerProc);
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, w, l);
}
return 0;
}

const char g_szClassName[] = "myWindowClass";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
memset(&wc, 0, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(0, IDI_APPLICATION);

RegisterClassEx(&wc);

hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
0, 0, hInstance, 0);

ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&Msg, 0, 0, 0) > 0) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

关于c - Windows上C语言的定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28076194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com