永发信息网

我需要在SDK中编写SetTimer函数,有谁能给个例子,谢谢(有20分加送)

答案:1  悬赏:80  手机版
解决时间 2021-12-19 02:57
  • 提问者网友:蓝莓格格巫
  • 2021-12-18 14:33
我的函数为:
HWND hwnd = FindWindows("*#32770",NULL);
SetTimer(hwnd,1,1000, (TIMERPROC)WndProc);
而回调函数为:
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
unsigned char pStatus[32] = {NULL};

switch (message)
{
case WM_CREATE :
break ;
case WM_SIZE :
break ;
case WM_TIMER :
SendTestCommandMFT(CMD_TEST,E_1K_TONE_RECV_OFF,pStatus,3);
KillTimer(hwnd,1);
// AfxMessageBox("1",MB_OK);
break ;
case WM_PAINT :
break ;
case WM_DESTROY :
break ;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

程序看起来感觉没有错,但程序并不能按照设想的走(我希望其是1s后就执行SendTestCommandMFT(CMD_TEST,E_1K_TONE_RECV_OFF,pStatus,3)的)

请高手帮忙告知一下,谢谢啦!!
dos62:谢谢!!
但我还是不是很明白你的话

对于你的第二方法我有试过,但不行呢。。
最佳答案
  • 五星知识达人网友:duile
  • 2022-01-05 20:02
误解SetTimer了。
要不:
SetTimer(hwnd,uID,1000, (TIMERPROC)NULL);
此时应在hwnd所指定的窗口的窗口函数里响应WM_TIMER,uID区分不同的定时器。

要不:
SetTimer(0,1,1000, (TIMERPROC)TWndProc);
这里的TWndProc不是窗口过程,仅仅一个独立的CALLBACK而已。

BTW,"*#32770"是MS内定的面向对话框的系列窗口,FindWindow/Ex得不到有效的句柄的。

=======================================
闲来无事,帖一段给别人的回答:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc,hd;
RECT rc;
TCHAR tx[]=L"Hello,VS2005.";
HWND hw;
switch (message)
{
case WM_COMMAND:
break;
case WM_CREATE:
SetTimer(hWnd,1,1000,NULL);
break;
case WM_TIMER:
hw=GetForegroundWindow();
if(hw)
{
hd=GetDC(hw);
TextOut(hd,10,10,tx,_tcslen(tx));
ReleaseDC(hw,hd);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
KillTimer(hWnd,1);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯