pipi6680110
love潇洒小峰
2015-09-23 06:24
采纳率: 75%
浏览 1.8k
已采纳

WIN32编程断点无法命中WM_TIMER消息

在WIN32编程中,设置了定时器,我在WM_Timer消息中打上断点,却无法命中断点,是怎么回事?
大家看看我的代码有没有问题?

 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT    rect;   
    int TIMER1 = 1;
    SYSTEMTIME st;
    static TCHAR str[50];
    switch (message)
    {
    case WM_CREATE:SetTimer(hwnd, TIMER1, 100, NULL);
        return 0;       
    case WM_PAINT:
        hdc = GetDC(hwnd);      
        TextOut(hdc, 0, 0, str, 50);        
        ReleaseDC(hwnd, hdc);
        return 0;
    case WM_TIMER:
        GetLocalTime(&st);      
        GetTimeFormat(LOCALE_SYSTEM_DEFAULT, TIME_FORCE24HOURFORMAT, &st, "hh':'mm':'ss", str, 50);     
        return 0;
    case WM_DESTROY:
        KillTimer(hwnd, TIMER1);
        PostQuitMessage(0);
        return 0;


    }

    return DefWindowProc(hwnd, message, wParam, lParam);
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • oyljerry
    oyljerry 2015-09-23 10:45
    已采纳
     /*--------------------------------------
       BEEPER1.C -- Timer Demo Program ver1
    --------------------------------------*/
    
    #include <windows.h>
    #include <stdlib.h>
    
    #define ID_TIMER    1
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
        static TCHAR szAppName[] = TEXT("Beeper1");
        HWND         hwnd;
        MSG          msg;
        WNDCLASS     wndclass;
    
        wndclass.style         = CS_HREDRAW | CS_VREDRAW;
        wndclass.lpfnWndProc   = WndProc;
        wndclass.cbClsExtra    = 0;
        wndclass.cbWndExtra    = 0;
        wndclass.hInstance     = hInstance;
        wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH);
        wndclass.lpszMenuName  = NULL;
        wndclass.lpszClassName = szAppName;
    
        if (!RegisterClass (&wndclass))
        {
        MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR);
        return 0 ;
        }
    
        hwnd = CreateWindow(szAppName, TEXT ("Beeper1 Timer Demo"),
                            WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT, CW_USEDEFAULT,
                            CW_USEDEFAULT, CW_USEDEFAULT,
                            NULL, NULL, hInstance, NULL);
    
        ShowWindow(hwnd, iCmdShow);
        UpdateWindow(hwnd);
    
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        HBRUSH          hBrush;
        HDC             hdc;
        PAINTSTRUCT     ps;
        RECT            rc;
    
        switch (message)
        {
        case WM_CREATE:
            SetTimer(hwnd, ID_TIMER, 1000, NULL);
            return 0 ;
    
        case WM_TIMER:
            MessageBeep(-1);
            InvalidateRect(hwnd, NULL, FALSE);
            return 0;
    
        case WM_PAINT:
            hdc = BeginPaint (hwnd, &ps) ;
    
            GetClientRect(hwnd, &rc);
            hBrush = CreateSolidBrush(RGB(rand()%255, rand()%255, rand()%255));
            FillRect(hdc, &rc, hBrush);
    
            EndPaint (hwnd, &ps) ;
            return 0 ;
    
        case WM_DESTROY:
            KillTimer(hwnd, ID_TIMER);
            PostQuitMessage (0) ;
            return 0 ;
        }
        return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    
    
    点赞 评论
  • C_arles
    C_arles 2015-09-23 09:52

    你的OnTimer函数呢,setTimer,但三个参数,给空的话,应该要调用OnTimer函数,不会调用你自定义函数

    点赞 评论
  • pipi6680110
    love潇洒小峰 2015-09-24 02:35

    SetTimer(hwnd, ID_TIMER, 1000, NULL);
    书上说,最后一个参数如果为空的话,是表示把WM_TIMER消息发送到消息队列里啊,应该是这样写的

    点赞 评论
  • u013354805
    ChenYuanshen 2015-09-24 02:38

    是不是同一个进程,如果不是断点肯定进不去

    点赞 评论

相关推荐